从我的简单测试看来,但我想知道这是否有保证?
是否存在无法保证订购的条件?
编辑:我特别感兴趣的是如果我用大量条目填充地图,迭代器的顺序是否会在我的可执行文件的多次运行中相同?如果条目以不同的顺序插入怎么办?
答案 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的相同实现下的相同数据集上,是的。就我所知,它不能保证在不同的实现中是相同的。