c++ - unordered_map 的自定义哈希问题
问题描述
我有一个 unordered_map,其元素由一对(字符串,枚举)索引,并带有这样的自定义哈希:
enum E { A, B, C };
using my_type = std::pair<std::string, E>;
struct _my_type_hasher : std::hash<std::string>, std::unary_function < my_type, size_t >
{
size_t operator()(const my_type& id) const
{
size_t r = std::hash<std::string>::operator()(id.first);
r *= id.second;
return r;
//return std::hash<std::string>()(id.first) ^ std::hash<int>()(id.second);
}
};
std::unordered_map<my_type, Bar, _my_type_hasher> m_foo;
由于当枚举的值为 A(乘以 0)时存在明显的冲突,所以我们用哈希器的 operator() 中的注释行更改了哈希器。
但是我们发现有时,我们的产品在两个哈希器之间的结果是不同的,而 unordered_map 应该处理冲突。每次出现差异时,都意味着我们的数据集存在问题。
但是从 c++ 的角度来看,即使我们产品中使用的数据集不好,为什么两个哈希之间存在行为差异?
非常感谢 !
解决方案
推荐阅读
- python - Python中有没有办法找到名称中数字最小的文件?
- amazon-web-services - Unity AWS SDK 支持独立还是仅支持移动?
- xpath - XPATH 多个条件以排除某些元素
- python - 如何在python上存储和读取我的逻辑操作
- java - Spring Boot (Netflix Eureka) - 访问微服务的自定义 URI
- python - 在 python 中释放数据帧内存
- c# - StreamReader 在 while 循环中读取 null
- next.js - 如何将默认登录页面更改为登录而不是索引
- jquery - 如何在 API 成功中获得 Draftjs 编辑器状态
- python - 在 python 中使用每个项目的 venv 是否被认为是一种好习惯?