迭代器->;第二个意思? 在C++中,A类型的STD是::MAP::迭代器< /C> >?/P>
我们知道,类型为迭代器->;第二个意思? 在C++中,A类型的STD是::MAP::迭代器< /C> >?/P>,c++,stl,iterator,C++,Stl,Iterator,我们知道,类型为std::map::iterator的对象it有一个重载的操作符->,它返回一个std::pair*,并且std::pair有一个第一个和第二个成员 但是,这两个成员对应什么,为什么我们必须访问存储在映射中的值作为it->second其键为K且值为V为std::pair-键为const,以防止您干扰映射值的内部排序 std::pair有两个成员,分别命名为first和second(请参见),具有相当直观的含义。因此,给定某个映射的迭代器i,表达式: i->first i-
std::map::iterator
的对象it
有一个重载的操作符->
,它返回一个std::pair*
,并且std::pair
有一个第一个和第二个成员
但是,这两个成员对应什么,为什么我们必须访问存储在映射中的值作为it->second
其键为K
且值为V
为std::pair
-键为const
,以防止您干扰映射值的内部排序
std::pair
有两个成员,分别命名为first
和second
(请参见),具有相当直观的含义。因此,给定某个映射的迭代器i
,表达式:
i->first
i->second
这相当于:
(*i).first
(*i).second
指迭代器指向的对
对象的第一个(const
)元素,即它指映射中的键。相反,表达式:
i->first
i->second
这相当于:
(*i).first
(*i).second
引用对的第二个元素,即映射中的对应值。我确信您知道std::vector
存储了一大堆X
对象,对吗?但是如果你有一个std::map
,它实际上存储的是一大堆std::pair
s。这正是映射的含义——它将键和相关值配对在一起
当您迭代一个std::map
时,您正在迭代所有这些std::pair
s。当您取消引用其中一个迭代器时,将得到一个std::pair
,其中包含键及其关联值
std::map<std::string, int> m = /* fill it */;
auto it = m.begin();
std::map m=/*填充它*/;
自动it=m.begin();
在这里,如果您现在执行*it
,您将获得映射中第一个元素的std::pair
现在,该类型允许您通过两个成员访问其元素:first
和second
。因此,如果您有一个名为p
的std::pair
,p.first
是X
对象,p.second
是Y
对象
现在您知道,取消对std::map
迭代器的引用会得到一个std::pair
,然后可以使用第一个和第二个访问它的元素。例如,(*it)。首先
将为您提供密钥,(*it)。其次
将为您提供值。这相当于用于地图和无序地图的it->first
和it->second
。
map存储键值对,其中i->first表示键,i->second表示反射值。
#包括
#定义长整型
使用名称空间std;
int32_t main(){
地图m;
m、 插入({1,2});
m、 插入({2,4});
用于(自动i:m){
coutAstd::map
存储一个键和一个值。map::iterator.second
指的是该值。为什么他们不像编程中的其他任何东西一样使用[0]和[1](表示“第一”和“第二”)呢?@AdamCross因为运算符[]
必须返回特定的类型,但是第一个和第二个可以有不同的类型。另一方面,std::tuple
有一个特殊的帮助函数std::get
,用于通过索引访问其元素。单词“key”和“value”比“first”和“second”更直观,这意味着排序。