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

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

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

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

Ответы [ 3 ]

11 голосов
/ 30 декабря 2010

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

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

0 голосов
/ 30 декабря 2010

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

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

0 голосов
/ 30 декабря 2010

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

...