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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • `std::map<std::string, enum{1, 2, 3, 4}>` (или std::map<std::string, tuple<bool, bool>>`) кэширует` против `std: :set<st
    Anonymous » » в форуме C++
    0 Ответы
    323 Просмотры
    Последнее сообщение Anonymous
  • C++: скопируйте контейнер STL в контейнер STL, используя лямбда-выражение
    Anonymous » » в форуме C++
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous
  • C++: скопируйте контейнер STL в контейнер STL, используя лямбда-выражение
    Anonymous » » в форуме C++
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • Почему в контейнерах STL в контейнерах STL нет перегрузки RVALUE Ref-квалификации?
    Anonymous » » в форуме C++
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Являются ли STL Map или HashMaps потокобезопасными?
    Гость » » в форуме C++
    0 Ответы
    25 Просмотры
    Последнее сообщение Гость

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