这是为了让用户输入他/她希望搜索的姓名、联系方式和地址。我想做的是显示所有应用 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/