使用并集作为std::unordereded_map的密钥
Using union as key for std::unordered_map
我想使用具有结构{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,那么您需要使用其他实现或自己编写一个实现。
相关文章:
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- 允许从 std::map 的密钥窃取资源?
- TMap::Emplace() 在应用现有密钥时会覆盖吗?
- 在没有密钥的情况下读取密文的剩余噪声预算
- 如何修复无效的API密钥,IP或操作权限错误?
- 所有可能的链接生成器与64位密钥
- 如何在unordered_map中更改密钥?
- 获取当前密钥状态?
- curl_easy_perform() 失败:SSL 对等证书或 SSH 远程密钥不正常
- 将密钥发送到非前台的游戏窗口
- 有哪些方法可以对基于 256 位密钥的矩阵进行加扰?
- 如何在精灵表上的两个不同部分之间来回切换,同时用户仍使用 SFML 持有密钥
- 如何将CNG密钥转换为OpenSSL EVP_PKEY(反之亦然)?
- 运行密钥密码解密知道密钥?
- std::unordered_map 运算符 [] 是否对非现有密钥进行零初始化?
- 封装 std::map 以允许迭代,但没有直接密钥访问?
- 如果我使用同一个密钥推送用户数据两次,会发生什么
- 如何在C++中创建自己的编译密钥
- 重载std::映射不同的密钥类型
- 使用C/C++访问OS X密钥链