使用并集作为std::unordereded_map的密钥

Using union as key for std::unordered_map

本文关键字:unordereded 密钥 map std      更新时间:2023-10-16

我想使用具有结构{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,所以不能使用变体。

实现这一点的最佳实践是什么?

最佳做法可能是不要这样做。

是否需要自定义哈希?

是。

哈希是如何工作的

散列程序需要知道哪个联合成员是活动的,然后应用适合该类型的散列函数。由于不可能通过检查联合对象来找出活动成员,因此这相当棘手。

在实践中,您需要使用某种"标记的并集"类型,如std::variant,而不是并集。尽管有这个名称,标记的并集通常在C++中不在内部使用并集的情况下实现。如果您不能使用C++17,那么您需要使用其他实现或自己编写一个实现。