【问题标题】:How does exactly iterator (of std::map) works in C++? [duplicate](std::map 的)迭代器究竟是如何在 C++ 中工作的? [复制]
【发布时间】:2017-12-28 14:47:31
【问题描述】:
我尝试运行以下代码:
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"!
【问题讨论】:
标签:
c++
dictionary
iterator
std
【解决方案1】:
原因是std::map 是一个排序容器。它根据键(在您的特定情况下为 std::string)对其元素(键值对)进行排序。
然后,字符串按字典顺序相互比较。由于字符串four 是所有字符串中最小的字符串,因此 ("four", "3") 对成为第一对。所以begin() 返回指向这对的迭代器。
【解决方案2】:
我不确定,但我认为 std::map 对关键元素进行排序以便快速搜索。 (我相信它使用二进制搜索)。如果你不想改变顺序,你必须使用 std::vector 或 std::list 或 std::deque 之类的东西。