2015-03-10 3 views
4

При переходе по std::unordered_map STL не дает никаких гарантий, по которым рассматривается конкретный порядок элементов.unordered_map порядок итерации для одного и того же ключа

Мой вопрос касается порядка элементов с одним и тем же ключом, я попробовал его с разными компиляторами, и я всегда получаю один за другим, если у них одинаковый ключ (пример ниже). Я обыскал его, но не смог найти. Он упоминается где-то в стандартах или зависит от реализации?

unordered_multimap<int, int> umap; 

umap.insert({30, 9}); 
umap.insert({10, 1}); 
umap.insert({20, 5}); 
umap.insert({30, 8}); 
umap.insert({20, 4}); 
umap.insert({10, 2}); 

for (auto p : umap) 
    cout << p.first << " " << p.second << endl; 

выходы

30 8 
30 9 
20 4 
20 5 
10 1 
10 2 

ответ

7

Да, он упоминается в C++ 11 23.2.5/6:

В контейнерах, которые поддерживают эквивалентные ключи, элементы с эквивалентными ключами являются смежными друг друга в порядке итерации контейнера.

+0

Добавлен вопрос, тот же ключевой элемент смежный, но между ними последовательность? Спасибо –

+0

@RonTang: Что ты имеешь в виду? Элементы с эквивалентными ключами смежны друг с другом, поэтому они образуют последовательность, как вы заметили. –

+0

Я хочу спросить сортировку значения этого же ключа по тому, что правило, меньшее, большее, вставить последовательность или что-то еще. Это UB. Спасибо –