algorithm - C++ 如何使 find_if 不仅返回应用 pred 为真的第一个对象

标签 algorithm stl c++

这是为了让用户输入他/她希望搜索的姓名、联系方式和地址。我想做的是显示所有应用 pred 的对象是真的,但我似乎无法让它工作。

static string searchName, searchContact, searchAddress;

bool search_User(User &u)
{ 
   return (u.getName() == searchName && u.getContact() == searchContact && u.getAddress() == searchAddress);

}
void searchUser(vector<User> &u)
{
    cout << "Name of user: ";
    getline(cin, searchName);
    cout << "Contact of tutor: ";
    getline(cin, searchContact);
    cout << "Adress of user: ";
    getline(cin, searchAddress);
    vector<User>::iterator i;
    i = find_if(u.begin(), u.end(), search_User);
    cout << i->getName() << i->getContact() << i->getAddress() << endl;
}

最佳答案

通常的解决方案是使用std::copy_if:

std::vector<User> matches;
std::copy_if(v.begin(), v.end(), std::back_inserter(matches),
    [Name, Contact, Address](User const& u)
    { return u.getName() == Name && u.getContact() == Contact && u.getAddress() == Address;});

或者只是写一个经典的循环

for (User& u : users) {
  if (search_User(u) {
    std::cout << u; // Assumes you've implemented operator<<(ostream&, User)
  }
} 

关于algorithm - C++ 如何使 find_if 不仅返回应用 pred 为真的第一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9034388/

相关文章:

java - 我需要帮助在 Java 中的 JPanel 上实现 A* 算法

algorithm - 网格打包算法

c++ - 为什么C++ STL不提供一套线程安全的容器?

c++ - "vector iterator + offset out of range"断言有用吗?

c++ - 检查函数返回类型是否与 STL 容器类型值相同

algorithm - 棘手的链表问题

java - 解决 Dice for Risk 游戏的这个 java 算法

C++ 代码翻译和名称查找

c++ - 双向链表无限循环?

派生自同一个类的类的 C++ 子类