我有一个程序,其结构充满了不同人的信息。还有一个载人,有了它。
struct Person
{
std::string fName;
std::string lName;
float length;
std::string nSignature;
bool operator==(const Person& m) const {
return ((m.fName == fName) && (m.lName == lName) && (m.length == length) && (m.nSignature == nSignature));
}
};
现在我要做的是,使用find_if并搜索结构中的nSignature。如果是,打印出与其连接的所有元素。
示例:
名字:约翰 姓:Doe 长度:1,78米 签名:johdoe
现在,如果我搜索johdoe,并且找到它,我想打印出与签名johdoe相关的所有细节(如abow)。
但这不是现在的主要问题,主要的问题是我无法让我的搜索工作。
void searchName(vector<Person> &persons)
{
string nameToFind;
cout << "Search" << flush;
cin >> nameToFind;
auto findIt = find_if(persons.begin(), persons.end(), [&nameToFind](Person& person) {
return person.nSignature == nameToFind;
});
if (findIt != persons.end())
cout << findIt << endl;
}
它没有找到任何东西,也没有返回任何东西。
我是否误解了find_if和运营商的使用?
答案 0 :(得分:1)
您的代码应该有效,并且会找到第一个正确的签名。
唯一的问题是你需要取消引用迭代器,并且还要为你的类重载操作符<<
。
cout << *findIt << endl;
或者如果你不想超载,你可以明确地想要你想要的东西
cout << findIt->fName << " " << findIt->lName << endl;
像这样过载,那么它会很好用。
ostream& operator<<(ostream& os, const Person& p)
{
os << p.fName << " " << p.lName << " " << p.length << " " << p.nSignature << endl;
return os;
}