我想創建一個unordered_map
,其中鍵是兩個整數的組合。由於鍵值順序應比較時被忽略,我想用一個unordered_set
像這樣關鍵的:C++使用無序鍵組合進行地圖查找
#include <unordered_set>
#include <unordered_map>
using namespace std;
int main()
{
unordered_set<int> key_set1 = {21, 42};
unordered_map<unordered_set<int>, char> map;
map[key_set1] = 'a';
...
unordered_set<int> key_set2 = {42, 21};
if(map[key_set2] == map[key_set2])
success();
}
在它看起來像一些問題與哈希函數編譯時間:
error: no match for call to ‘(const std::hash<std::unordered_set<int> >) (const std::unordered_set<int>&)’
noexcept(declval<const _Hash&>()(declval<const _Key&>()))>
如何我能解決這個問題嗎?還是有更好的方法/數據結構?
你可能會想std :: ints對,但你需要爲此添加一個散列。或者將您的密鑰更改爲64位整數,並將您的2整數與1 64位整數相結合。 – paulm
使用'set'作爲密鑰在這裏除了減慢程序速度外沒有任何其他用途。 –
其目的是,關鍵值可以無序。所以我的回答中的比較是真實的。 – Corbie