#include <iostream>
#include <set>
#include <string>
using namespace std;
struct Client {
string client_id;
int salary;
// allow client to sorted by salary
bool operator<(const Client& rhs) const {
return salary < rhs.salary;
}
// expect to search on client_id but this doesn't work
bool operator==(const Client& rhs) const {
return client_id == rhs.client_id;
}
};
int main()
{
set<Client> clients;
clients.emplace(Client{"a001", 10});
clients.emplace(Client{"a002", 20});
if (clients.find(Client{"a0001", 10}) != clients.end()) // Found
cout << "Found\n";
else
cout << "Not Found\n";
if (clients.find(Client{"a0002"}) != clients.end()) // Not Found
cout << "Found\n";
else
cout << "Not Found\n";
return 0;
}
set::find
的输出结果与this document匹配。
set::find
基于容器的比较对象,而后者又基于salary
而不是client_id
。
问题&GT;在这种情况下,我需要根据Clients
订购salary
,但在搜索时我想根据client_id
进行搜索。有办法解决这个问题吗?我想使用STL函数而不是自己写一个循环。
答案 0 :(得分:0)
您可以使用标准算法std :: find
if(find(clients.begin(),clients.end(),Client {“a0001”,10}))!= clients.end())//找到 cout&lt;&lt; “找到\ n” 个;