【问题标题】: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 之类的东西。

      【讨论】:

        猜你喜欢
        • 2012-08-28
        • 2012-01-26
        • 2019-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-12
        • 2023-03-16
        • 2012-10-07
        相关资源
        最近更新 更多