订购的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.
std::maps 使用给定类型operator<或使用自定义比较函数/函子(如果一个作为参数提供给构造函数)进行排序。
所以不,当您遍历地图时,您获得的第一个项目不会是您首先插入的项目 - 它将是按字母顺序排在第一位的项目。
当然,对于您的示例代码没有任何区别,因为“A”是您插入的第一个键,也是按字母顺序排列的第一个键。