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好吧,也许下次在发布之前我应该起草一个更好的例子。抱歉搞混了……好的。谢谢也许我只是在吓唬自己这是错的。很抱歉