小编典典

iterator->second 是什么意思?

all

在 C++ 中, a 的类型是std::map<>::iterator什么?

我们知道一个it类型的对象有一个返回 astd::map<A,B>::iterator的重载对象,并且该对象有一个and成员。operator ->``std::pair<A,B>*``std::pair<>``first``second

但是,这两个成员对应什么,为什么我们必须访问存储在 map 中的值it->second


阅读 23

收藏
2022-08-05

共1个答案

小编典典

我相信你知道 astd::vector<X>存储了一大堆X对象,对吧?但如果你有一个std::map<X, Y>,它实际上存储的是一大堆std::pair<const X, Y>s。这正是地图的本质——它将键和相关值配对在一起。

当您遍历 astd::map时,您将遍历所有这些std::pairs。当您取消引用其中一个迭代器时,您将获得std::pair包含键及其关联值的
a。

std::map<std::string, int> m = /* fill it */;
auto it = m.begin();

在这里,如果您现在这样做*it,您将获得std::pair地图中第一个元素的 。

现在,该类型std::pair允许您通过两个成员访问其元素:firstsecond.
所以如果你有一个std::pair<X, Y>被调用的p,p.first是一个X对象并且p.second是一个Y对象。

所以现在您知道取消引用std::map迭代器会给您一个,然后您可以使用andstd::pair访问它的元素。例如,会给你钥匙,会给你价值。这些等价于和。first``second``(*it).first``(*it).second``it->first``it->second

2022-08-05