如何在c++中使用地图结构

  介绍

如何在c++中使用地图结构?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

地图的常用用法

映射表示映射,可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器),例如可以建立如int到翻倍,字符串到int的映射等。

地图提供一对一的散列,该功能类似Python的字典:

<李>

第一个称为键(关键),每个关键字只能在地图中出现一次;

<李>

第二个称为该键的值(价值);

1。头文件

& lt;比特/stdc + + .h>头文件已经包括了该头文件。

2。定义

定义如地图下,参数的第一个为关键的类型,第二个为价值的类型。

map,议员;

【注意】如果是字符串到整型的映射,必须使用字符串而不能用字符数组。

映射的键和值也可以是STL容器,例如可以将一个集容器映射到一个字符串:

map,, string>,议员;

3。地图容器内元素的访问

(1)通过下标访问

注意:映射的键是唯一的。

# include  & lt; iostream>   # include  & lt; map>   using  namespace 性传播疾病;   int  main () {   ,,,map,议员;   ,,,议员(& # 39;c # 39;],=, 30,,   ,,,cout  & lt; & lt;,议员(& # 39;c # 39;], & lt; & lt;, endl;,   ,,,return  0;   }

30(2)通过迭代器访问

定义迭代器:

map:: iterator ;

这样可以得到迭代器,地图可以使用它→第一次来访问键,使用它→第二次来访问值。

# include  & lt; stdio.h>   # include  & lt; map>   using  namespace 性传播疾病;   int  main () {   ,,,map,议员;   ,,,议员[& # 39;猴子# 39;],=,20;   ,,,议员(& # 39;" # 39;],=,30;   ,,,议员(& # 39;一个# 39;],=,40;   ,,,(map:: iterator  it =, mp.begin();,它!=mp.end (); + +) {   ,,,,,,,printf (“% c  % d \ n",,它→第一,,它→秒);   ,,,}   ,,,return  0;   }

输出:


40米20 30 r

【注意】地图会以键从小到大的顺序自动排序。迭代器的比较不能用& lt;或者祝辞,而只能使用==或者!=

(3)通过逆向迭代器访问

# include  & lt; stdio.h>   # include  & lt; map>   using  namespace 性传播疾病;   int  main () {   ,,,map,议员;   ,,,议员[& # 39;猴子# 39;],=,20;   ,,,议员(& # 39;" # 39;],=,30;   ,,,议员(& # 39;一个# 39;],=,40;   ,,,(map:: reverse_iterator  it =, mp.rbegin();,它!=mp.rend (); + +) {   ,,,,,,,printf (“% c  % d \ n",,它→第一,,它→秒);   ,,,}   ,,,return  0;   }

输出:

30 r
40 m 20

rbegin()指向地图的最后一个元素,撕裂()指第向地图一个元素之前。

4。图元素的插入

(1)通过插入+ & lt;关键,value>插入

map, mapStudent;,,   mapStudent.insert (pair<, int, string> (1),“student_one"));

(2)通过插入+迭代器插入

map, mapStudent;,,   mapStudent.insert (map<, int, string>:: value_type  (1),“student_one"));

(3)通过数组方式插入

map, mapStudent;,,   mapStudent [1],=,“student_one"

【注意】第一、二种方法完全等价,但是第三种和前两种有所区别。当映射中包含了键,则第一,二中方法插入失败,而第三种方法会覆盖之前的键值对,所以先后插入相同的关键元素,第一、二种方法会保留第一次的数据,第三种会保留最后一次的。

5。地图常用函数实例解析

(1)发现()

找到(关键)返回键为键的映射的迭代器,时间复杂度为O (logN), N为地图中映射的个数。

# include  & lt; stdio.h>   # include  & lt; map>   using  namespace 性传播疾病;   int  main () {   ,,,map,议员;   ,,,议员(& # 39;一个# 39;],=,1;   ,,,议员(& # 39;b # 39;],=, 2;   ,,,议员(& # 39;c # 39;],=, 3;   ,,,map:: iterator  it =, mp.find (& # 39; b # 39;);   ,,,printf (“% c  % d \ n",,它→第一,,它→秒);   ,,,return  0;   }

如何在c++中使用地图结构