在C++中,std::map<>::iterator
的类型是什么
我们知道std::map<A,B>::iterator
类型的对象it
有一个重载的operator ->
,它返回一个std::pair<A,B>*
,并且std::pair<>
有一个first
和second
成员。
但是,这两个成员对应的是什么,为什么我们必须访问存储在映射中作为it->second
的值
发布于 2013-03-17 00:04:19
我相信您知道std::vector<X>
存储了一大堆X
对象,对吧?但是如果你有一个std::map<X, Y>
,它实际上存储的是一大堆std::pair<const X, Y>
,这就是映射的本质--它将键和相关的值配对在一起。
当你遍历一个std::map
时,你就是在遍历所有这些std::pair
,当你取消对其中一个迭代器的引用时,你会得到一个包含这个键及其相关值的std::pair
。
std::map<std::string, int> m = /* fill it */;
auto it = m.begin();
在这里,如果您现在执行*it
,您将获得映射中第一个元素的std::pair
。
现在,类型std::pair
允许您通过两个成员访问它的元素:first
和second
。因此,如果您有一个名为p
的std::pair<X, Y>
,那么p.first
是一个X
对象,而p.second
是一个Y
对象。
现在你知道了,取消对std::map
迭代器的引用会得到一个std::pair
,然后你就可以用first
和second
来访问它的元素了。例如,(*it).first
将为您提供密钥,(*it).second
将为您提供值。它们等同于it->first
和it->second
。
发布于 2021-04-17 03:19:28
用于映射和无序映射。
map存储键值对,其中i->first是键,i->second是反映值。
#include<bits/stdc++.h>
#define long long int
using namespace std;
int32_t main(){
map<int,int> m;
m.insert({1,2});
m.insert({2,4});
for(auto i:m){
cout<<"key - "<<i.first<<" "<<" Value - "<<i.second<<endl;
}
}
https://stackoverflow.com/questions/15451287
复制相似问题