做的时候
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
实际创建哈希的问题,详见此处。
答案 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;