Почему map будет работать намного быстрее, чем unordered_map?

Я реализовал кеширование результатов поиска, которые состоят из ключей типа 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 (), которая сообщает среднее количество столкновений.

12
задан Neil G 31 January 2011 в 01:58
поделиться