Всегда ли полезно устанавливать количество сегментов в конструкторе, если мы знаем количество элементов заранее, а не резервировать их позже?

Я вижу, что создание пустой карты unordered_map устанавливает количество корзин по умолчанию (в моем случае это 11). После чего, если я вызову unordered_map.reserve(n), где n довольно велико, он немедленно перефразируется. Так что это хорошая идея передать большое число (возможно, n в качестве резерва конструктору unordered_map, чтобы сохранить перефразирование. Поправьте меня, если я ошибаюсь в своем понимании.


person user4362837    schedule 08.01.2015    source источник


Ответы (1)


Конечно... если вы знаете, сколько элементов у вас будет, хорошо бы сообщить об этом и конструктору. У конструктора не было бы аргумента, если бы он не был потенциально полезен. Это всего лишь подсказка, предложенный вами минимум, но я полагаю, что все стандартные библиотеки будут соблюдать его, возможно, после округления до некоторой степени двойки или простого числа в зависимости от других решений реализации/проектирования, которые они сделали. Уравновешивая улучшенную скорость создания/заполнения, риск/затраты связаны с обслуживанием: если вы позволите своему «подсказку» не синхронизироваться с вашими фактическими потребностями, вы можете в конечном итоге тратить память или терять производительность (например, иметь слишком низкую нагрузку). фактор может означать меньшее количество обращений к кэш-страницам).

person Tony Delroy    schedule 16.01.2015