我有一些整数向量,希望能够在C++11的unordered_map中高效地存储,我的问题是:
如何最好地存储它们并优化查找?
我想到了以下哈希函数:
class uint32_vector_hasher {
public:
std::size_t operator()(std::vector<uint32_t> const& vec) const {
std::size_t ret = 0;
for(auto& i : vec) {
ret ^= std::hash<uint32_t>()(i);
}
return ret;
}
};
然后将对象存储在 unordered_map
中。 但是,我有几个问题:
- 哈希函数计算频率如何? 只计算一次,还是随机数次,还是多次?
- 创建一个具有
==
和哈希函数的包装器对象是否有意义,以记忆哈希并避免计算多次?
在进行性能分析时,我注意到相当大量的 CPU 时间花费在 unordered map 的查找上,这不是非常理想的 :(
uint32_t
的所有位中的范围不太大),则组合后的哈希值将不使用最高有效位。 - Michael Burr