Вообще говоря, итерация по контейнеру, скорее всего, займет столько же времени, сколько итерация над другой, поэтому, если вы продолжаете добавлять в контейнер и затем итерации по нему, это в основном вопрос выбора контейнера, который позволяет постоянно перераспределить память и быстро вставить то, что вы хотите.
В обоих списках и мультимапах не нужно перераспределять себя просто из добавления элемента (например, вы могли бы получить с помощью вектора), поэтому речь идет прежде всего о том, сколько времени требуется для вставки. Добавление в конец списка будет O (1), в то время как добавление в мультимап будет O (log n). Тем не менее, multimap будет вставлять элементы в отсортированном порядке, а если вы хотите отсортировать список, вам придется либо отсортировать список в O (n log n), либо вставить элемент отсортированным способом с помощью что-то вроде lower_bound, которое будет O (n). В любом случае для использования списка будет намного хуже (в худшем случае).
Как правило, если вы поддерживаете контейнер в отсортированном порядке и постоянно добавляете его, а не создаете его и сортируете его один раз, наборы и карты более эффективны, поскольку они предназначены для сортировки. Конечно, как всегда, если вы действительно заботитесь о производительности, профилирование вашего конкретного приложения и наблюдение за тем, что работает лучше, - это то, что вам нужно делать. Однако в этом случае я бы сказал, что это почти гарантия того, что multimap будет быстрее (особенно если у вас очень много элементов вообще).
Списки являются контейнером последней инстанции - для моих мыслей по этому вопросу см. Http://punchlet.wordpress.com/2009/12/27/letter-the-fourth/ – 2010-04-14 16:53:03
Что еще вы должны делать с этими объекты? Итерации над ним каждый раз? экстракт мин? Это уже узкое место? Насколько велик список? – fabrizioM
Как вы просматриваете предметы в списке, когда хотите их найти? –