0
#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匹配。是基于容器的比较对象,而容器的比较对象又基于而不是。set::findsalaryclient_id

问题> 在这种情况下,我需要Clients根据他们进行排序,salary但是在搜索时我想根据client_id. 有没有办法解决这个问题?我想使用 STL 函数而不是自己编写循环。

4

1 回答 1

0

您可以使用标准算法 std::find

if ( find( clients.begin(), clients.end(), Client{"a0001", 10} ) ) != clients.end()) // 找到 cout << "Found\n";

于 2013-10-18T16:18:09.780 回答