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