Я вижу, что создание пустой карты unordered_map устанавливает количество корзин по умолчанию (в моем случае это 11). После чего, если я вызову unordered_map.reserve(n)
, где n довольно велико, он немедленно перефразируется. Так что это хорошая идея передать большое число (возможно, n в качестве резерва конструктору unordered_map, чтобы сохранить перефразирование. Поправьте меня, если я ошибаюсь в своем понимании.
Всегда ли полезно устанавливать количество сегментов в конструкторе, если мы знаем количество элементов заранее, а не резервировать их позже?
Ответы (1)
Конечно... если вы знаете, сколько элементов у вас будет, хорошо бы сообщить об этом и конструктору. У конструктора не было бы аргумента, если бы он не был потенциально полезен. Это всего лишь подсказка, предложенный вами минимум, но я полагаю, что все стандартные библиотеки будут соблюдать его, возможно, после округления до некоторой степени двойки или простого числа в зависимости от других решений реализации/проектирования, которые они сделали. Уравновешивая улучшенную скорость создания/заполнения, риск/затраты связаны с обслуживанием: если вы позволите своему «подсказку» не синхронизироваться с вашими фактическими потребностями, вы можете в конечном итоге тратить память или терять производительность (например, иметь слишком низкую нагрузку). фактор может означать меньшее количество обращений к кэш-страницам).