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

时间:2009-06-11 03:30:56

标签: c++ stl map iterator

从我的简单测试看来,但我想知道这是否有保证?

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

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

5 个答案:

答案 0 :(得分:9)

是的,它保持内部顺序,因此对未更改的集合的迭代应始终相同。来自here

  

在内部,地图中的元素   从较低到较高的键排序   特定严格弱势后的价值   订购标准设置   构造

答案 1 :(得分:6)

std::map排序容器,因此,是的,保证顺序(与您在构造函数中隐式或显式使用的顺序相同)。对于流行的(虽然还没有标准)hashmap依靠这一点 - 它在许多情况下具有很多优势std::map,但不是可预测的迭代顺序!

答案 2 :(得分:1)

std :: map是一个有序的集合
你必须定义小于运算符
想象m是T型的地图:

assert(m.size() > 1);
for (std::map<T>::const_iterator i = m.begin(); i != m.end(); ++i) {
    std::map<T>::const_iterator j = i + 1;
    while ( j != m.end() ) {
        assert(*i < *j);
        ++j;
    }
}

答案 3 :(得分:0)

如果STL映射不变,STL映射是否会给出与begin / end相同的顺序?是。如果您更改了地图,请不要依赖于保持相同的顺序。

答案 4 :(得分:-2)

在STL的相同实现下的相同数据集上,是的。就我所知,它不能保证在不同的实现中是相同的。