Я не проверял TR1, но N3035 (черновик C ++ 0x) говорит следующее:
Все категории итераторов
требуются только те функции, которые
реализуемо для данной категории в
постоянное время (амортизируется). Следовательно,
таблицы требований для итераторов
нет столбца сложности.
Стандарт не дает гарантии эффективности, кроме как с точки зрения сложности, поэтому у вас нет гарантированного сравнения list
и unordered_map
, за исключением того, что они оба амортизируются постоянным временем (т.е. линейным временем для полной итерации над контейнером).
На практике я бы ожидал, что итератор unordered_map
будет по крайней мере в окрестностях list
, , если только ваша хэш-карта не очень заполнена. В сложности полной итерации может присутствовать член O (число сегментов). Но я никогда не смотрел ни на одну из реализаций unordered_map
специально для C ++, поэтому я не знаю, каких украшений ожидать в упрощенной реализации хэш-таблицы «массив связанных списков». Если у вас есть «типичная» тестовая платформа, если вы пытаетесь написать код, который, безусловно, будет самым быстрым из всех реализаций C ++, тогда вам не повезло; -)