C++ c++;使用std::find在向量中搜索

C++ c++;使用std::find在向量中搜索,c++,C++,我试图将std::find用于自定义向量对象。我不理解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 !=vec

我试图将
std::find
用于自定义向量对象。

我不理解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()) {
编辑:正如我看到的,你已经给你的代码加上了UoDate。不过大体上

int main() {
   person personDetails;
   personDetails.findName();
}
您创建了一个默认的初始化对象数据成员,其(即std::string对象)为空。向量本身也是空的。所以我不明白你会发现什么

我也不知道用什么函数或方法来填充向量

似乎你使用的塔希特人是一个有名字和个人资料的人

it=std::find(vector.begin(),vector.end(),person(name,name))

如果向量中的记录包含不同名称和配置文件的对,则无法找到任何东西

看看你自己的评论

/*e.g now my vector contains
         john male
         mary female
         susan female
所以您无法找到定义为person(name,name)的记录。参数应具有不同的值

将运算符定义为

bool operator==(const person &lhs,const person &rhs) {
    return lhs.name == rhs.name && lhs.profile == rhs.profile;
}

据我所知,您的代码是正确的。

以下内容可能会有所帮助:

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;
}
班级人员
{
公众:
人员(const std::string和name,const std::string和profile):
姓名,
简介(简介)
{}
常量std::string&getName()常量{return name;}
私人:
std::字符串名;
std::字符串配置文件;
};
类FindByName
{
公众:
显式FindByName(const std::string&name):name(name){}
布尔运算符()(const Person和Person)const
{
return person.getName()==name;
}
私人:
std::字符串名;
};
int main(int argc,char*argv[])
{
性病媒人={
{“约翰”,“男”},
{“玛丽”,“女”},
{“苏珊”,“女”}
};
auto it=std::find_if(persons.begin()、persons.end()、FindByName(“mary”);
// ...
返回0;
}

您需要显示您的
运算符==
。不应该这样吗!=vector.end()而不是userDetails.end()?这没关系,因为在find的第三个参数中,您给了它一个想要在这个向量中找到的值。您必须重载==运算符,因为find的实现需要它将vector的元素和您的person(name,name)进行比较。所以为什么您认为有问题?现在看起来不错了。@juanchopanza好吧,也许下次在发布之前我应该起草一个更好的例子。抱歉搞混了……好的。谢谢也许我只是在吓唬自己这是错的。很抱歉