gpt4 book ai didi

c++ - std::pair 的哈希值,用于 unordered_map

转载 作者:行者123 更新时间:2023-11-30 05:10:56 25 4
gpt4 key购买 nike

做的时候

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

我们得到

Error C2338: The C++ Standard doesn't provide a hash for this type.

是否有内置方法为 intstd::pair 定义散列,还是我们需要手动定义它?(在这种情况下,哈希可以只是(第一项的字节)(对的第二项的字节)粘合在一起)。

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

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

最佳答案

如果您不想使用 boost,那么自己动手应该不会太难。添加了 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;

关于c++ - std::pair 的哈希值,用于 unordered_map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45395071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com