Какой лучший способ создать хэш-таблицу с определенным размером и пользовательской хэш-функцией в C++, используя STL
В программном проекте мне нужно создать хеш-таблицу с определенным размером и пользовательской хеш-функцией. Какой лучший способ сделать это в C++ с использованием STL? Из моего исследования 2 являются возможными решениями моей проблемы.
1) Unordered_multimap: проблемы здесь - это политика автоматического изменения размера unordered_multimap, когда коэффициент загрузки превышает пороговое значение, определяемая пользователем хеш-функция и объявление начального размера хеш-таблицы.
- Как я могу решить автоматическое изменение размера unordered_map? Нашел решение, установив "бесконечность" в коэффициент загрузки, но, похоже, подвержен ошибкам
- Когда я объявляю хеш-функцию, должен ли я также объявить функцию key_equality? Если да, то почему? Это необходимо для того, чтобы unordered_multimap помещал элементы с одинаковыми ключами в одну корзину?
- Из моего исследования я обнаружил, что для объявления начального размера сегментов для хеш-таблицы я могу использовать rehash(). Хотя после перефразирования, если указать n = 1000 количество сегментов, я всегда получаю чуть больше 1000. Есть ли способ получить именно то количество сегментов, которое я запрашиваю? (это важно для правильной работы моей хэш-функции)
2) Вектор списков. Этот подход больше похож на способ создания хеш-таблиц в C и не подходит для использования с C++. Проблемы здесь снова авто-изменение размера вектора.
- Есть ли способ, я могу гарантировать, что мой вектор не увеличится в размере после того, как я вставлю в него элементы?
По моему опыту первый подход лучше, но я не знаю, как преодолеть эти проблемы. Любой совет о том, как я должен действовать?
Примечание. Хеш-таблица, которую я хочу создать, состоит из пар (int, Element), где Element - это класс. Начальный размер хеш-таблицы известен во время выполнения и определяется размером входного набора данных.