std::unordered_map
обычно реализуется в виде таблицы ha sh со связанными списками . Таким образом, вставка в std::unordered_map
занимает в среднем постоянное время и линейное время в размере контейнера в худшем случае. Этот сценарий наихудшего случая для вставки соответствует случаю, когда элементы таблицы ha sh должны быть перефразированы , поскольку текущее количество сегментов в таблице недостаточно для удовлетворения коэффициента загрузки , и, следовательно, необходимо перераспределение массива сегментов.
Имея это в виду, если вы заранее знаете количество элементов, которые нужно вставить в std::unordered_map
, вам следует подумать о std::unordered_map::reserve()
, чтобы предотвратить повторное перемешивание при вставке. Таким образом, вы избежите как перераспределения массива сегментов, так и перефразирования.
Как и с std::map
есть некоторые перегрузки функции-члена insert()
, которые принимают так называемую подсказку :
iterator insert(const_iterator hint, const value_type& value);
Этот итератор подсказки может использоваться для дополнительная информация, которая может быть использована для ускорения вставки. Тем не менее, наличие этих функций-членов в std::unordered_map
подсказке только для совместимости интерфейса, чтобы сделать его интерфейс более подходящим для общего c программирования. Таким образом, они не улучшают время вставки.
О функции ha sh
Насколько совершенной является ваша функция ha sh, не должно иметь большого значения, когда дело доходит до времени вставки - только как быстро он вычисляет га sh ключа. Однако это становится актуальным при поиске элементов в таблице ha sh по их ключам.