【问题标题】:std::map iterator output order will be constant if map keys/values don't change?如果映射键/值不变,std::map 迭代器输出顺序将保持不变?
【发布时间】:2010-12-30 12:55:36
【问题描述】:

如果我不更改映射中的键/值,是否保证 map::iterator 的输出顺序?

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

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

【问题讨论】:

    标签: c++ map iterator std


    【解决方案1】:

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

    顺序由map的比较运算符决定,默认为std::less&lt;Key&gt;

    一句话:是的。

    【讨论】:

      【解决方案2】:

      仅在修改操作(插入、擦除、清除)时修改顺序,其他操作不会影响排序

      【讨论】:

        【解决方案3】:

        std::map 保证被排序。如果内容不改变,地图排序也不应该改变。

        我只能想到一种可能不会发生的场景:映射键是指针,比较函子取消引用键指向的对象以对它们执行比较操作。键未更改,但 do 指向的值(出于任何其他原因)。即使在那里,我也不确定标准是否强制 std::map 的实现仅在插入元素时评估比较。

        【讨论】:

        • 这将是一种非法的比较关系,因为如果比较可能在不同时间产生不同的答案,则比较不会对键产生严格的弱排序。
        猜你喜欢
        • 1970-01-01
        • 2019-03-28
        • 1970-01-01
        • 1970-01-01
        • 2018-08-28
        • 2018-11-15
        • 1970-01-01
        • 2021-03-23
        • 1970-01-01
        相关资源
        最近更新 更多