gpt4 book ai didi

c++ - 在结构 C++ 的 vector 中使用 find_if 和 remove_if

转载 作者:行者123 更新时间:2023-11-28 04:50:43 27 4
gpt4 key购买 nike

我有一个程序,其中包含一个包含不同人信息的结构。和一个 vector 人,用它。

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。如果是,则打印出所有连接到它的元素。

例子:

名字:约翰姓氏:母鹿长度:1,78m署名: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 和运算符的使用?

最佳答案

您的代码应该可以工作,并且会找到第一个正确的签名。

唯一的问题是您需要解引用迭代器,并且还要重载运算符 <<为你的类(class)。

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;
}

关于c++ - 在结构 C++ 的 vector 中使用 find_if 和 remove_if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48271454/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com