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