[英]Using union as key for std::unordered_map
我想將 union 與結構 {int, int, string} 和 integer 用作 unordered_map 的鍵。 執行此操作的最佳做法是什么? 散列是如何工作的,是否需要自定義散列?
struct nodeinfo {
int a;
int b;
string c;
};
union key{
nodeinfo structKey;
int intKey;
};
unordered_map<key, int> Map;
我想堅持 C++11 所以不能使用變體。
執行此操作的最佳做法是什么?
最佳做法可能是不這樣做。
是否需要自定義散列?
是的。
哈希是如何工作的
哈希器需要知道哪個聯合成員處於活動狀態,然后應用適合該類型的 hash function 。 由於無法通過檢查工會 object 來找出活動成員,這非常棘手。
而不是聯合,實際上您需要使用某種“標記聯合”類型,例如std::variant
。 盡管名稱如此,標記聯合通常在 C++ 內部不使用聯合來實現。 如果你不能使用 C++17,那么你需要使用一些其他的實現或者自己寫一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.