簡體   English   中英

使用聯合作為 std::unordered_map 的鍵

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM