【问题标题】:Using union as key for std::unordered_map使用联合作为 std::unordered_map 的键
【发布时间】:2020-03-09 15:46:58
【问题描述】:

我想使用带有结构{int, int, string} 和整数的联合作为 unordered_map 的键。执行此操作的最佳做​​法是什么?散列是如何工作的,是否需要自定义散列?

struct nodeinfo {
int a;
int b;
string c;
};

union key{
nodeinfo structKey;
int intKey; 
};

unordered_map<key, int> Map;

我想坚持使用 C++11,所以不能使用变体。

【问题讨论】:

标签: c++ stl std unordered-map


【解决方案1】:

执行此操作的最佳做​​法是什么?

最好的做法可能是不这样做。

是否需要自定义散列?

是的。

散列是如何工作的

哈希器需要知道哪个联合成员处于活动状态,然后应用适合该类型的哈希函数。由于无法通过检查联合对象来找出活动成员,这非常棘手。

实际上,您需要使用某种“标记的联合”类型,例如std::variant,而不是联合。尽管有这个名字,标记联合通常是在 C++ 内部不使用联合的情况下实现的。如果你不能使用 C++17,那么你需要使用一些其他的实现或者自己写一个。

【讨论】:

    猜你喜欢
    • 2012-07-09
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 2017-04-27
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    相关资源
    最近更新 更多