Я реализовал результаты кэширования поиска, которые состоят из ключей типа State (класс с 7 короткими ints) и значений типа Socre (класс из 3 удваивается). Использование unordered_map было как минимум в 20 раз медленнее, чем карта. Почему?
Редактировать: Darn it! Моя хэш-функция была
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(), которая сообщает о среднем числе столкновений.