完全iterator(std :: map)如何在C ++中工作?

时间:2017-07-22 15:56:21

标签: c++ dictionary iterator std

我尝试运行以下代码:

std::map < std::string, std::string > m;
m[ "one" ] = "0";
m[ "two" ] = "1";
m[ "three" ] = "2";
m[ "four" ] = "3";

auto it = m.begin();
std::cout << it->first << "\n";

输出为:"four"。但为什么从头到尾呢?我被期待"one"

2 个答案:

答案 0 :(得分:5)

原因是std::map是一个已排序的容器。它根据密钥对其元素进行排序,这些元素是键值对,在您的特定情况下为std::string

然后,字符串按字典顺序相互比较。由于字符串four是所有字符串中最小的字符串,因此该对(“4”,“3”)成为第一对。所以begin()返回指向该对的迭代器。

答案 1 :(得分:0)

我不确定,但我认为std :: map会对快速搜索的关键元素进行排序。 (我相信它使用二进制搜索)。如果你不想改变订单,你可以使用std :: vector或std :: list或std :: deque之类的东西。