如果映射键/值没有改变,std :: map iterator输出顺序将是常量吗?

时间:2010-12-30 12:55:37

标签: c++ map iterator std

如果我不更改该映射中的键/值,

是map :: iterator的输出顺序吗?

例如,我用一些键/值初始化一个映射,然后执行一系列循环,并在每个循环中迭代映射并执行只读操作,每次迭代的输出是否相等?

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

3 个答案:

答案 0 :(得分:11)

std::map是一个有序集合。从begin()end()的迭代将始终按顺序返回地图条目。

订单由地图的比较运算符确定,默认为std::less<Key>

总之:是的。

答案 1 :(得分:0)

订单仅在修改操作(insert,erase,clear)上修改,其他操作不会影响订购

答案 2 :(得分:0)

std::map保证要排序。如果内容没有改变,则不应该进行地图排序。

我只能想到一个可能不会发生这种情况的场景:map键是指针和比较functor dereferences对象指向的对象,用于对它们执行比较操作。键不会更改,但do指向的值(由于任何其他原因)。即使在那里,我也不确定标准是否强制实施std::map仅在插入元素时评估比较。