我正在尝试将std::find
用于自定义矢量对象。
答案 0 :(得分:1)
我不理解find
之后的if语句 it = std::find(vector.begin(),vector.end(),person(name,name));
if (it !=userDetails.end()) {
//found
}
else {
//not found
}
这是什么意思?
it !=userDetails.end()
我相信这些绅士不属于同一范围。
也许你想写
if (it !=vector.end()) {
编辑:我看到你已经通过了你的代码。但是在主要的
int main() {
person personDetails;
personDetails.findName();
}
您创建了一个默认的初始化对象数据成员(即std :: string对象)为空。矢量本身也是空的。所以我不明白你会找到什么?
此外,我没有看到用于填充矢量的函数或方法。
似乎你所使用的tahit人是一个有姓名和个人资料的人
it = std :: find(vector.begin(),vector.end(),person(name,name));
然后,如果向量中的记录包含不同名称和配置文件的对,则无法找到。
查看自己的评论
/*e.g now my vector contains
john male
mary female
susan female
因此您无法找到定义为人(姓名,姓名)的记录。参数应该有不同的值。
将运算符定义为
bool operator==(const person &lhs,const person &rhs) {
return lhs.name == rhs.name && lhs.profile == rhs.profile;
}
答案 1 :(得分:0)
据我所知,您的代码是正确的。
答案 2 :(得分:0)
以下可能会有所帮助:
class Person
{
public:
Person(const std::string& name, const std::string& profile) :
name(name),
profile(profile)
{}
const std::string& getName() const { return name; }
private:
std::string name;
std::string profile;
};
class FindByName
{
public:
explicit FindByName(const std::string& name) : name(name) {}
bool operator () (const Person& person) const
{
return person.getName() == name;
}
private:
std::string name;
};
int main(int argc, char *argv[])
{
std::vector<Person> persons = {
{"john", "male"},
{"mary", "female"},
{"susan", "female"}
};
auto it = std::find_if(persons.begin(), persons.end(), FindByName("mary"));
// ...
return 0;
}