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
的輸出結果確實匹配this document。 set::find
基於容器的比較對象,該對象依次基於salary
而不是client_id
。如何在std :: set中定義FIND和ORDER的不同標準
問題>在這種情況下,我需要根據它們的salary
訂購Clients
,但在搜索時我想根據client_id
進行搜索。有沒有辦法解決這個問題?我想使用STL函數而不是自己寫一個循環。
你的'<'操作語義不應該與'=='的語義相矛盾。你有沒有想過保持一個按工資排序的'set',還有一個[多]地圖clientid - >客戶端? – Vlad
我希望有人能給我指出正確的設計理念 – q0987
非常簡單:定義你需要的操作,檢查它們被調用的頻率,選擇最合適的數據結構。如果需要快速添加和按X排序,並按Y快速查找,那麼可以這樣做:您需要按X排序的列表和由Y排列的查找(即映射)。 – Vlad