我有一个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 ++的角度来看,即使我们产品中使用的数据集不好,为什么两个哈希值之间还是存在行为差异?
非常感谢!