我尝试运行以下代码:
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"
!
答案 0 :(得分:5)
原因是std::map是一个已排序的容器。它根据密钥对其元素进行排序,这些元素是键值对,在您的特定情况下为std::string。
然后,字符串按字典顺序相互比较。由于字符串four
是所有字符串中最小的字符串,因此该对(“4”,“3”)成为第一对。所以begin()
返回指向该对的迭代器。
答案 1 :(得分:0)
我不确定,但我认为std :: map会对快速搜索的关键元素进行排序。 (我相信它使用二进制搜索)。如果你不想改变订单,你可以使用std :: vector或std :: list或std :: deque之类的东西。