C++ STL: как работает набор std::unordered и хеширование std::unordered_map?C++

Программы на C++. Форум разработчиков
Anonymous
C++ STL: как работает набор std::unordered и хеширование std::unordered_map?

Сообщение Anonymous »

Я пытаюсь понять, как работает неупорядоченный набор/карта STL (т. е. хэш-карты).
Я понял, что начальный размер хеш-таблицы (т. е. количество сегментов) установлен на 8 и когда в набор/карту добавляется больше элементов, это число будет удваиваться снова и снова.
Итак, набор/карта AFAIU должен хранить массив сегментов.
Я понимаю, что по умолчанию используется хэш-функция (скажем, для int):

Код: Выделить всё

size_t std::hash(int key);
По определению хеш-функция сопоставляет ключ с индексом в хеш-таблице, т. е. с индексом сегмента в массиве сегментов.
Итак, хеш-функция должна сопоставить любой int-ключ с индексом от 0 до размера массива сегментов.
Однако хеш-функция не получает размер массива сегментов, так откуда она это знает?То же самое, если я предоставлю свою собственную хеш-функцию, которая будет получать только ключ, например:

Код: Выделить всё

struct HashFunctionCalc
{
size_t operator()(int key) const { return ... }
};
Как он узнает, как сопоставить этот ключ с индексом сегмента, не зная, сколько сегментов существует?
Заранее спасибо...

Подробнее здесь: https://stackoverflow.com/questions/783 ... shing-work

Вернуться в «C++»