.NET Framework имеет класс Dictionary , который реализован в виде хеш-таблиц и обеспечивает получение данных в постоянное время (O (1)). Я ищу аналогичную реализацию в C ++. Я знаю о std :: map , но на этот поиск данных уходит логарифмическое время. Есть ли хорошая реализация хеш-таблицы в C ++, которая будет извлекать данные в постоянное время?
Если я напишу свой собственный, как я вычислю хеш-код для ключа? Как и в .NET, я думал о методе GetHashCode () для типов.
template<typename TKey,typename TVal>
class Dictionary
{
public:
void Add(TKey key, TVal val){
int hashCode = key.GetHashCode();
/* .... */
}
}
Если мне понравилось выше, и у данного типа ключа нет метода GetHashCode (), компилятор выдаст ошибку. Но этот метод не будет работать, когда ключ имеет примитивные типы, такие как int . Мне может понадобиться написать оболочку для int , указав GetHashCode .
Интересно, как C ++ это реализует?
Есть мысли?