2010-12-30 1 views
1

- это порядок вывода карты :: итератор гарантирован, если я не изменю ключи/значения на этой карте?std :: map порядок вывода итератора будет постоянным, если ключи/значения карты не изменяются?

Например, я инициализирую карту с некоторыми ключами/значениями, затем выполняю последовательность циклов и в каждом цикле перебираем по карте и выполняем действия только для чтения, будет ли выход каждой итерации равным?

for(i=0;i<5;i++) 
for(it=map.begin(); it!=map.end(); it++) 
    // read some value from map 

ответ

11

std::map - это упорядоченная коллекция. Итерация от begin() до end() всегда будет возвращать записи карт по порядку.

Порядок определяется оператором сравнения карты по умолчанию std::less<Key>.

Одним словом: да.

0

заказ изменяется только модифицируя операции (вставка, удаление, ясно), другие операции не будут влиять на упорядочение

0

std::map гарантии для сортировки. Если содержимое не изменяется, сортировка карт не должна.

Я могу только подумать о сценарии, в котором этого может не произойти: ключи карты представляют собой указатели и функции сравнения объектов сравнения, на которые указывают клавиши, для выполнения операций сравнения с ними. Ключи не изменяются, а значения, указываемые do (по любой другой причине). И даже там я не уверен, что стандартная сила реализует std::map для оценки сравнения только во время ввода элементов.

+2

Это было бы незаконным отношением сравнения, поскольку сравнение не давало бы строгого слабого порядка на ключах, если бы сравнение могло давать разные ответы в разное время. –

+0

@Charles Bailey: приятно это знать. Большое спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^