C ++中的地图顺序?

时间:2017-04-11 21:31:02

标签: c++

我是C ++的新手,我最近一直在试用这门语言。

我开始使用map进行一些基本的迭代。

我发现的是以下代码:

map<string, int> persons = {{"Lily", 14}, {"John", 45}};

for ( const auto &p : persons ) {

    cout << p.first << " is " << p.second << " years old." << endl;
}

始终返回:

John is 45 years old.
Lily is 14 years old.

无论人的顺序如何(例如,如果我打开Lily&amp; John)。

map内是否有任何排序?

2 个答案:

答案 0 :(得分:5)

std::map(以及std::set)根据其Comparator排序,默认为std::less,调用operator <的重载以存储密钥。

因此,std::string s are ordered lexicographically

答案 1 :(得分:4)

是的,map中有订单。

具体而言,std::map按键订购商品。在这种情况下,您使用std::string作为键,因此通过比较字符串来排序键。由于J位于字母表中的L之前,因此它也会先在地图中排序。

如果您愿意,您可以提供自己的比较例程(作为函数,或者最好是函数对象),它指定不同的顺序(但它仍然必须满足&#34;严格的弱排序&#34;标准,(例如)A<BB<C表示A<C}。