Я пытаюсь использовать функцию std::find()
для std::vector
. Почему этот код вызывает ошибку, и как я могу это исправить?
struct person_id{
int p_id;
};
std::vector<person_id> people;
person_id tmp_person;
tmp_person.p_id = 5;
people.push_back(tmp_person);
if(std::find(people.begin(), people.end(), 5) != people.end()) {
cout<<"Contain"<<endl;
} else {
cout<<"Not Contain"<<endl;
}
Всего 2 ответа
Вам нужно добавить constructor
и operator ==
чтобы исправить ошибку компилятора
#include <algorithm>
#include <vector>
#include <iostream>
struct person_id{
person_id() = default;
person_id(int id) : p_id (id) {}
bool operator==(const person_id& other) { return p_id == other.p_id; }
int p_id;
};
using std::cout;
using std::endl;
int main(int argc, char* argv[]) {
std::vector<person_id> people;
person_id tmp_person;
tmp_person.p_id = 5;
people.push_back(tmp_person);
if(std::find(people.begin(), people.end(), 5) != people.end()) {
cout<<"Contain"<<endl;
} else {
cout<<"Not Contain"<<endl;
}
return 0;
}
struct person_id
std::find
Проверьте это здесь: https://coliru.stacked-crooked.com/a/437f4ec26bbc7995
Ваш вектор является контейнером типа person_id
, который вы person_id
, используя значение int
. Как компилятор должен знать, что целочисленный литерал 5
должен сравниваться с полем p_id
?
Простое решение - иметь vector<int>
: зачем вам эта структура? Если вам все еще нужен этот тип, определите оператор сравнения или оператор преобразования ... Есть много способов реализовать это, дайте нам больше подробностей.