用于std :: pair的哈希,用于unordered_map

时间:2017-07-29 23:46:00

标签: c++ dictionary hashmap unordered-map std-pair

做的时候

unordered_map<pair<unsigned int, unsigned int>, unsigned int> m;

我们得到了

  

错误C2338:C ++标准没有为此类型提供哈希。

是否有内置方法为std::pair int定义哈希,还是需要手动定义?(在这种情况下,哈希)可能只是(第一项的字节)(该对的第二项的字节)粘在一起。)

注意:我使用的是VC ++ 2013。

注2:pair<int,int> pair as key of unordered_map issue的答案并没有明确解决如何使用两个int实际创建哈希的问题,详见此处。

1 个答案:

答案 0 :(得分:1)

如果你不想使用提升,滚动你自己不应该太难。 添加static_assert以确保维持2个整数适合1个size_t的假设。

using IntPair = std::pair<int, int>;

struct IntPairHash {
    static_assert(sizeof(int) * 2 == sizeof(size_t));

    size_t operator()(IntPair p) const noexcept {
        return size_t(p.first) << 32 | p.second;
    }
};

std::unordered_map<IntPair, int, IntPairHash> myMap;
相关问题