• 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. hdu1247 字典树或者hash

    题意:      给你一些串,问你哪些串是由其他两个串连接成的. 思路:        我用了两种方法,一个是hash,hash的时候用map实现的,第二种方法是字典树,字典树我们枚举每个一字符串,查 ...

  2. UVA11019KMP(二维矩阵匹配出现次数)

    题意:     给你两个矩阵,一个大的一个小的,然后问你这个小矩阵在大的矩阵里出现了多少次? 思路:       说好了AC自动机的,我自己尝试写了个暴力的KMP竟然过了,AC自动机自己的模板还没写完 ...

  3. 在Windows上使用终端模拟程序连接操作Linux以及上传下载文件

    在Windows上使用终端模拟程序连接操作Linux以及上传下载文件 [很简单,就是一个工具的使用而已,放这里是做个笔记.] 刚买的云主机,或者是虚拟机里安装的Linux系统,可能会涉及到在windo ...

  4. 【python】Leetcode每日一题-扰乱字符串

    [python]Leetcode每日一题-扰乱字符串 [题目描述] 使用下面描述的算法可以扰乱字符串 s 得到字符串 t : 如果字符串的长度为 1 ,算法停止 如果字符串的长度 > 1 ,执行 ...

  5. Java常用类详解

    目录 1. String类 1.1 String的特性 1.2 String字面量赋值的内存理解 1.3 String new方式赋值的内存理解 1.4 String 拼接字面量和变量的方式赋值 1. ...

  6. Jenkins 基础篇 - Server 配置

    我们使用 Jenkins 部署服务之前要先配置我们的目标服务器,配置目标服务器也很简单,就是将服务器的 IP.账号密码或者账号密钥配置在 Jenkins中.在演示服务器配置之前我们要先知道 Linux ...

  7. Python socket 编程实验

    实验内容 1.编写一个基于UDP协议的客户机与服务器程序,实现相互通讯. 2.编写一个基于TCP协议的客户机与服务器程序,实现相互通讯. 3.捕获以上两种通讯的数据包,使用Wireshark进行分析, ...

  8. Linux软件安装管理之——dpkg与apt-*详解 apt命令(dpkg和apt代替rpm)

    apt list *python* Nosee123关注赞赏支持   Linux软件安装管理之--dpkg与apt-*详解 [Linux软件安装管理系列]- - 传送门: - -<Linux软件 ...

  9. IT行业新闻事件

    台积电: http://www.eefocus.com/component/394512 新闻合集: https://mail.qq.com/cgi-bin/frame_html?sid=q3Mhqr ...

  10. 七牛云-上传、删除文件,工具类(Day49)

    要求: 1. java1.8以上 2. Maven: 这里的version指定了一个版本范围,每次更新pom.xml的时候会尝试去下载7.5.x版本中的最新版本,你可以手动指定一个固定的版本. < ...