从begin()到end()迭代时,STL映射是否总是给出相同的顺序?

Jam*_*ook 8 c++ iterator stl map

它似乎来自我的简单测试,但我想知道这是否有保证?

是否存在无法保证订购的条件?

编辑:我特别感兴趣的情况是,如果我填充一个包含大量条目的地图,迭代器的顺序是否会在我的可执行文件的多次运行中相同?如果条目以不同的顺序插入怎么办?

i_a*_*orf 9

是的,它维护一个内部订单,因此对未更改的集合的迭代应该始终相同.从这里:

在内部,地图中的元素按照在构造上设置的特定严格弱排序标准从较低到较高的键值排序.


Ale*_*lli 6

std::map是一个已排序的容器,所以,是的,顺序是有保证的(与您在构造函数中隐式或显式使用的顺序相同).千万不能在这个流行的计算(虽然还未斯塔纳德)hashmap虽然-它在很多情况下WRT有很多优点std::map,但重复的可预知的顺序!