我实现了一个搜索缓存结果,它由 State 类型的键(具有 7 个短整数的类)和类型的值Score
(3 个双精度类)组成。使用 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() 函数来报告平均碰撞次数。