Bas*_*asj 3 c++ dictionary unordered-map hashmap std-pair
做的时候
unordered_map<pair<unsigned int, unsigned int>, unsigned int> m;
Run Code Online (Sandbox Code Playgroud)
我们得到
错误 C2338:C++ 标准未提供此类型的哈希值。
是否有内置的方法来定义 of 的哈希值std::pair,int或者我们需要手动定义它?(在这种情况下,散列可以只是(第一项的字节)(该对的第二项的字节)粘合在一起)。
注意:我使用的是 VC++ 2013。
注意2: pair<int,int>pair作为unordered_map问题的关键的答案并没有清楚地解决如何实际创建具有两个ints的散列的问题,如此处详述。
如果您不想使用 boost,那么自己动手应该不会太难。添加 static_assert 是为了确保维持 2 个 int 适合 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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5398 次 |
| 最近记录: |