使用unordered_map的自定义哈希问题

时间:2019-07-01 10:11:35

标签: c++ dictionary hash 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 ++的角度来看,即使我们产品中使用的数据集不好,为什么两个哈希值之间还是存在行为差异?

非常感谢!

0 个答案:

没有答案