我实现了一个搜索缓存结果,由类型为 State(一个带有 7 个 short int 的类)的键和类型为 Score(一个带有 3 个 double 的类)的值组成。使用 unordered_map 至少比 map 慢 20 倍。为什么?
编辑:该死!我的哈希函数是
namespace std {
size_t hash<State>::operator()(State const& s) const {
size_t retval = hash<short>()(s.s[0]);
for (int i = 1; i < R; i += 2) { // 1 3 5
int x = (static_cast<int>(s.s[i + 1]) << 16)
+ (static_cast<int>(s.s[i]));
hash_combine(retval, x);
}
}
}
我忘了写 return retval
,所以一切都冲突了!我希望 unordered_map 有一个 hash_function_quality() 函数,可以报告平均冲突次数。
std::map
。只有大约19个操作来访问一个元素。任何计算机都可以非常快速地执行19个操作,即使是20世纪50年代的原型计算机也是如此。 - wilhelmtell