Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果映射键/值不变,映射迭代器输出顺序将保持不变?_C++_Map_Iterator_Std - Fatal编程技术网

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的实现仅在插入元素时评估比较。

这将是一种非法的比较关系,因为如果比较在不同时间产生不同的答案,比较不会在键上产生严格的弱排序。这将是一种非法的比较关系比较关系,因为如果比较可以在不同的时间产生不同的答案,那么比较不会在键上产生严格的弱顺序。