在 C++ 中, a 的类型是std::map<>::iterator什么?
std::map<>::iterator
我们知道一个it类型的对象有一个返回 astd::map<A,B>::iterator的重载对象,并且该对象有一个and成员。operator ->``std::pair<A,B>*``std::pair<>``first``second
it
std::map<A,B>::iterator
operator ->``std::pair<A,B>*``std::pair<>``first``second
但是,这两个成员对应什么,为什么我们必须访问存储在 map 中的值it->second?
it->second
我相信你知道 astd::vector<X>存储了一大堆X对象,对吧?但如果你有一个std::map<X, Y>,它实际上存储的是一大堆std::pair<const X, Y>s。这正是地图的本质——它将键和相关值配对在一起。
std::vector<X>
X
std::map<X, Y>
std::pair<const X, Y>
当您遍历 astd::map时,您将遍历所有这些std::pairs。当您取消引用其中一个迭代器时,您将获得std::pair包含键及其关联值的 a。
std::map
std::pair
std::map<std::string, int> m = /* fill it */; auto it = m.begin();
在这里,如果您现在这样做*it,您将获得std::pair地图中第一个元素的 。
*it
现在,该类型std::pair允许您通过两个成员访问其元素:first和second. 所以如果你有一个std::pair<X, Y>被调用的p,p.first是一个X对象并且p.second是一个Y对象。
first
second
std::pair<X, Y>
p
p.first
p.second
Y
所以现在您知道取消引用std::map迭代器会给您一个,然后您可以使用andstd::pair访问它的元素。例如,会给你钥匙,会给你价值。这些等价于和。first``second``(*it).first``(*it).second``it->first``it->second
first``second``(*it).first``(*it).second``it->first``it->second