在结构C++向量中使用find_if和remove_if

Use find_if and remove_if in a vector of struct C++

本文关键字:if find remove 结构 C++ 向量      更新时间:2023-10-16

我有一个程序,其结构中充满了不同人的信息。和一个矢量人,有了它。

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,78米签名:约赫多

现在,如果我搜索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和运算符的使用?

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

唯一的问题是您需要取消引用迭代器,并且还需要重载类的运算符<<

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