C++ 如果映射键/值不变,映射迭代器输出顺序将保持不变?
如果不更改映射中的键/值,是否保证映射::迭代器的输出顺序 例如,我使用一些键/值初始化一个映射,然后执行一系列循环,在每个循环中迭代映射并执行只读操作,每次迭代的输出是否相等C++ 如果映射键/值不变,映射迭代器输出顺序将保持不变?,c++,map,iterator,std,C++,Map,Iterator,Std,如果不更改映射中的键/值,是否保证映射::迭代器的输出顺序 例如,我使用一些键/值初始化一个映射,然后执行一系列循环,在每个循环中迭代映射并执行只读操作,每次迭代的输出是否相等 for(i=0;i<5;i++) for(it=map.begin(); it!=map.end(); it++) // read some value from map 映射是一个有序的集合。从开始到结束的迭代将始终按顺序返回映射项 顺序由映射的比较运算符确定,该运算符默认为std::less 总而言之:
for(i=0;i<5;i++)
for(it=map.begin(); it!=map.end(); it++)
// read some value from map
映射是一个有序的集合。从开始到结束的迭代将始终按顺序返回映射项
顺序由映射的比较运算符确定,该运算符默认为std::less
总而言之:是。std::map是一个有序的集合。从开始到结束的迭代将始终按顺序返回映射项
顺序由映射的比较运算符确定,该运算符默认为std::less
总之:是。仅在修改操作插入、擦除、清除时修改顺序,其他操作不会影响排序仅在修改操作插入、擦除、清除时修改顺序,其他操作不会影响排序。如果内容不变,则地图排序不应改变 我只能想到一种可能不会发生这种情况的场景:映射键是指针,而比较函子取消引用键所指向的对象,以便对它们执行比较操作。键不会更改,但do出于任何其他原因指向的值会更改。即使在那里,我也不确定标准是否强制std::map的实现仅在插入元素时评估比较。std::map保证排序。如果内容不变,则地图排序不应改变
我只能想到一种可能不会发生这种情况的场景:映射键是指针,而比较函子取消引用键所指向的对象,以便对它们执行比较操作。键不会更改,但do出于任何其他原因指向的值会更改。即使在这里,我也不确定标准是否强制std::map的实现仅在插入元素时评估比较。这将是一种非法的比较关系,因为如果比较在不同时间产生不同的答案,比较不会在键上产生严格的弱排序。这将是一种非法的比较关系比较关系,因为如果比较可以在不同的时间产生不同的答案,那么比较不会在键上产生严格的弱顺序。