23

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"));
4

2 回答 2

49

STL 地图是有序的吗?

是的, astd::map<K,V>是根据键排序的Kstd::less<K>默认情况下用于比较对象。

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

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

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

于 2012-06-30T14:45:20.293 回答
5

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

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

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

于 2012-06-30T14:47:55.347 回答