迭代器>秒是什么意思?

What does iterator->second mean?

本文关键字:是什么 意思 gt 迭代器      更新时间:2023-10-16

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

我们知道类型为std::map<A,B>::iterator的对象it有一个重载的operator ->,它返回一个std::pair<A,B>*,并且std::pair<>有一个firstsecond成员。

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

我相信你知道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允许您通过两个成员:firstsecond访问它的元素。因此,如果std::pair<X, Y>名为p,则p.firstX对象,p.secondY对象。

现在你知道对一个std::map迭代器解引用得到一个std::pair,然后你可以用firstsecond访问它的元素。例如,(*it).first将为您提供键,(*it).second将为您提供值。这些等价于it->firstit->second

键为K,值为Vstd::map的元素类型(也是通过对该映射的迭代器解引用获得的表达式类型)为std::pair<const K, V>,键为const,以防止干扰映射值的内部排序。

std::pair<>有两个成员名为firstsecond(见这里),具有相当直观的含义。因此,给定映射对象的迭代器i,表达式:

i->first

相当于:

(*i).first

指向由迭代器指向的pair对象的第一个 (const)元素,即它指向映射中的。相反,表达式:

i->second

相当于:

(*i).second

pair第二个元素,即映射中对应的

用于映射和无序映射。

map存储键值对,其中i->第一个是键,i->第二个是反映值。

#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;
  }
}