• map的定义
map<typename1, typename2> mp;

  map需要确定映射前类型和映射后类型,所以需要在<>内填写两个类型,第一个是键的类型,第二个是值的类型。

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

map<string, int> mp;
  • map容器内元素的访问

  map可以通过下标访问或通过迭代器访问。

  (1)通过下标访问

 1 #include <iostream>
2 #include <map>
3 using namespace std;
4 map<char, int> mp;
5 int main()
6 {
7 mp['a']=1;
8 mp['c']=2;
9 cout<<mp['c'];
10 return 0;
11 }
输出结果:
2

  (2)通过迭代器访问

  map迭代器的定义:

map<typename1, typename2>::iterator it;

  map可以使用it->first来访问键,使用it->second来访问值。

  实例:

 1 #include <iostream>
2 #include <map>
3 using namespace std;
4 map<char, int> mp;
5 int main()
6 {
7 mp['a']=1;
8 mp['c']=2;
9 mp['b']=3;
10 for(map<char, int>::iterator it=mp.begin();it!=mp.end();it++){
11 cout<<it->first<<" "<<it->second<<endl;
12 }
13 return 0;
14 }
输出结果:
a 1
b 3
c 2

  从上面例子我们可以看出,map会以键从小到大的顺序自动排序。这是由于map内部是使用红黑树实现的(set也是)。

  • map常用函数

  (1)find()

  find(key)返回键值为key的映射的迭代器,时间复杂度为O(logN),N为map中映射的个数。

 1 #include <iostream>
2 #include <map>
3 using namespace std;
4 map<char, int> mp;
5 int main()
6 {
7 mp['a']=1;
8 mp['c']=2;
9 mp['b']=3;
10 map<char, int>::iterator it=mp.find('c');
11 cout<<it->first<<" "<<it->second;
12 return 0;
13 }
输出结果:
c 2

  (2)erase()

  erase()可以删除单个元素,也可以删除一个区间的所有元素。

  ①删除单个元素

  mp.erase(it),it为需要删除的元素的迭代器,时间复杂度为O(1)。

 1 #include <iostream>
2 #include <map>
3 using namespace std;
4 map<char, int> mp;
5 int main()
6 {
7 mp['a']=1;
8 mp['c']=2;
9 mp['b']=3;
10 map<char, int>::iterator it=mp.find('c');
11 mp.erase(it);
12 for(map<char, int>::iterator it=mp.begin();it!=mp.end();it++){
13 cout<<it->first<<" "<<it->second<<endl;
14 }
15 return 0;
16 }
输出结果:
a 1
b 3

  mp.erase(key),key为欲删除的映射的键。时间复杂度为O(logN),N为map内元素的个数。

 1 #include <iostream>
2 #include <map>
3 using namespace std;
4 map<char, int> mp;
5 int main()
6 {
7 mp['a']=1;
8 mp['c']=2;
9 mp['b']=3;
10 mp.erase('c');
11 for(map<char, int>::iterator it=mp.begin();it!=mp.end();it++){
12 cout<<it->first<<" "<<it->second<<endl;
13 }
14 return 0;
15 }
输出结果:
a 1
b 3

  ②删除一个区间内的所有元素

 1 #include <iostream>
2 #include <map>
3 using namespace std;
4 map<char, int> mp;
5 int main()
6 {
7 mp['a']=1;
8 mp['c']=2;
9 mp['b']=3;
10 map<char, int>::iterator it=mp.find('c'); //令it指向键为c的值
11 mp.erase(it, mp.end()); //删除it之后的所有映射
12 for(map<char, int>::iterator it=mp.begin();it!=mp.end();it++){
13 cout<<it->first<<" "<<it->second<<endl;
14 }
15 return 0;
16 }
输出结果:
a 1
b 3 

  (3)size()

  size()用来获得map中映射的对数,时间复杂度为O(1)。

 1 #include <iostream>
2 #include <map>
3 using namespace std;
4 map<char, int> mp;
5 int main()
6 {
7 mp['a']=1;
8 mp['c']=2;
9 mp['b']=3;
10 cout<<mp.size();
11 return 0;
12 }
输出结果:
3

  (4)clear()

  clear()用来清除map中的所有元素,时间复杂度为O(N)。

 1 #include <iostream>
2 #include <map>
3 using namespace std;
4 map<char, int> mp;
5 int main()
6 {
7 mp['a']=1;
8 mp['c']=2;
9 mp['b']=3;
10 mp.clear(); //清空map
11 cout<<mp.size();
12 return 0;
13 }
输出结果:
0

C++标准模板库(STL)——map常见用法详解的更多相关文章

  1. C++标准模板库(STL)——queue常见用法详解

    queue的定义 queue<typename> name; queue容器内元素的访问 由于队列本身就是一种先进先出的限制性数据结构,因此在STL中只能通过front()来访问队首元素, ...

  2. C++标准模板库(STL)——set常见用法详解

    set的定义 set<typename> name; typename可以是任何基本类型,如int.double.char.结构体等,也可以是STL标准容器,如vector.set.que ...

  3. C++标准模板库(STL)——vector常见用法详解

    vector的定义 vector<typename> name; 相当于定义了一个一维数组name[SIZE],只不过其长度可以根据需要进行变化,比较节省空间,通俗来讲,vector就是& ...

  4. STL map 常见用法详解

    <算法笔记>学习笔记 map 常见用法详解 map翻译为映射,也是常用的STL容器 map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器) 1. map 的定义 / ...

  5. STL pair 常见用法详解

    <算法笔记>学习笔记 pair 常见用法详解 //pair是一个很实用的"小玩意",当想要将两个元素绑在一起作为一个合成元素, //又不想因此定义结构体时,使用pair ...

  6. STL vector常见用法详解

    <算法笔记>中摘取 vector常见用法详解 1. vector的定义 vector<typename> name; //typename可以是任何基本类型,例如int, do ...

  7. STL stack 常见用法详解

    <算法笔记>学习笔记 stack 常见用法详解 stack翻译为栈,是STL中实现的一个后进先出的容器.' 1.stack的定义 //要使用stack,应先添加头文件#include &l ...

  8. STL priority_queue 常见用法详解

    <算法笔记>学习笔记 priority_queue 常见用法详解 //priority_queue又称优先队列,其底层时用堆来实现的. //在优先队列中,队首元素一定是当前队列中优先级最高 ...

  9. STL queue 常见用法详解

    <算法笔记>学习笔记 queue 常见用法详解 queue翻译为队列,在STL中主要则是实现了一个先进先出的容器. 1. queue 的定义 //要使用queue,应先添加头文件#incl ...

随机推荐

  1. hdu2722 简单最短路,处理好输入就行

    题意:       从左上角走到右下角,有的最短时间,每段路径的长度都是2520,每段上都有自己的限制速度,方向. 思路:      直接写就行了,就是个最短路,权值是2520/限制,输入的时候细心点 ...

  2. Windows Pe 第三章 PE头文件-EX-相关编程-2(RVA_FOA转换)

    RVA-FOA之间转换 1.首先PE头加载到内存之后是和文件头内容一样的,就算是偏移不同,一个是磁盘扇区大小(400H)另一个是内存页大小(1000H),但是因为两个都是开头位置,所以相同. 2.看下 ...

  3. 码农飞升记-03-OpenJDK是什么?

    目录 1.OpenJDK 概述 2.OpenJDK 的发展史 3.OpenJDK Community 1.角色定义 Participant(参与者) Contributor(贡献者) OpenJDK ...

  4. Day009 面向对象和方法回顾

    面向过程&面向对象 面向过程思想 步骤清晰简单,第一步做什么,第二步做什么..... 面象过程适合处理一些较为简单的问题 面向对象思想 物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些 ...

  5. opencv——图像遍历以及像素操作

    摘要 我们在图像处理时经常会用到遍历图像像素点的方式,在OpenCV中一般有四种图像遍历的方式,在这里我们通过像素变换的点操作来实现对图像亮度和对比度的调整. 补充: 图像变换可以看成 像素变换--点 ...

  6. 面试题---->线程的入门,读完可以应付一般的面试(管理员不要移除我的随笔啊)

    这个都是入门和一般的常规知识,大佬轻喷 ①.继承Thread类 ②.实现Runnable接口(常用,优点多) ③.实现Callable接口 实现Runnable和Callable接口的类只能当作一个可 ...

  7. Solon 的过滤器 Filter 和两种拦截器 Handler、 Interceptor

    在web开发中,过滤器.拦截器是经常用到的功能.它可以帮我们限制流量.验证是否登陆.记录日志以及统计执行效率等等. 今天主要交流一下 Solon 框架中的过滤器和拦截器. Solon 是什么框架? S ...

  8. linux下将一个大的文件拆分成若干小文件

    命令:split,例子: 以行数拆分 -l参数: split –l 50 原始文件 拆分后文件名前缀 说明:以50行对文件进行拆分,最后一个文件的行数没有50行以实际行数进行分配,比如有一个名为 wl ...

  9. Iperf3网络性能测试工具详解教程

    Iperf3网络性能测试工具详解教程 小M 2020年4月17日 运维 本文下载链接 [学习笔记]Iperf3网络性能测试工具.pdf 网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保 ...

  10. vipivp常用linux命令

    基础安装 # CentOS sudo yum install epel-release 命令行Tips 进程及端口 # 查看端口占用情况 netstat -ap | grep 端口号   # 查看某一 ...