如何在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++中使用地图结构