c ++ std :: map <string,string>是否已订购?

Cod*_*ero 13 c++

订购的STL地图?

具体来说,我需要知道是否订购了std :: map.因此,如果我迭代它,它将首先使用第一个插入字符串进行迭代.

那么下面会反复迭代A,C然后B吗?

std::map<string,string> str_map;

str_map.insert(std::make_pair("A","Data"));
str_map.insert(std::make_pair("C","Data"));
str_map.insert(std::make_pair("B","Data"));
Run Code Online (Sandbox Code Playgroud)

Oli*_*rth 34

订购的STL地图?

是的,默认情况下,a std::map<K,V>基于密钥进行排序K,std::less<K>用于比较对象.

所以如果我迭代它,它会先用第一个插入字符串迭代?

不会.它将根据排序顺序进行迭代,而不是您插入元素的顺序.在这种情况下std::string,它按字典顺序排序(字母顺序).

如果要根据插入顺序进行迭代,最好使用序列容器,例如a std::vector或a std::list.


sep*_*p2k 5

std::maps 使用给定类型operator<或使用自定义比较函数/函子(如果一个作为参数提供给构造函数)进行排序。

所以不,当您遍历地图时,您获得的第一个项目不会是您首先插入的项目 - 它将是按字母顺序排在第一位的项目。

当然,对于您的示例代码没有任何区别,因为“A”是您插入的第一个键,也是按字母顺序排列的第一个键。