C++标准模板库(STL)——map常见用法详解
- 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常见用法详解的更多相关文章
- C++标准模板库(STL)——queue常见用法详解
queue的定义 queue<typename> name; queue容器内元素的访问 由于队列本身就是一种先进先出的限制性数据结构,因此在STL中只能通过front()来访问队首元素, ...
- C++标准模板库(STL)——set常见用法详解
set的定义 set<typename> name; typename可以是任何基本类型,如int.double.char.结构体等,也可以是STL标准容器,如vector.set.que ...
- C++标准模板库(STL)——vector常见用法详解
vector的定义 vector<typename> name; 相当于定义了一个一维数组name[SIZE],只不过其长度可以根据需要进行变化,比较节省空间,通俗来讲,vector就是& ...
- STL map 常见用法详解
<算法笔记>学习笔记 map 常见用法详解 map翻译为映射,也是常用的STL容器 map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器) 1. map 的定义 / ...
- STL pair 常见用法详解
<算法笔记>学习笔记 pair 常见用法详解 //pair是一个很实用的"小玩意",当想要将两个元素绑在一起作为一个合成元素, //又不想因此定义结构体时,使用pair ...
- STL vector常见用法详解
<算法笔记>中摘取 vector常见用法详解 1. vector的定义 vector<typename> name; //typename可以是任何基本类型,例如int, do ...
- STL stack 常见用法详解
<算法笔记>学习笔记 stack 常见用法详解 stack翻译为栈,是STL中实现的一个后进先出的容器.' 1.stack的定义 //要使用stack,应先添加头文件#include &l ...
- STL priority_queue 常见用法详解
<算法笔记>学习笔记 priority_queue 常见用法详解 //priority_queue又称优先队列,其底层时用堆来实现的. //在优先队列中,队首元素一定是当前队列中优先级最高 ...
- STL queue 常见用法详解
<算法笔记>学习笔记 queue 常见用法详解 queue翻译为队列,在STL中主要则是实现了一个先进先出的容器. 1. queue 的定义 //要使用queue,应先添加头文件#incl ...
随机推荐
- poj3648 2-sat
题意: 一对夫妻结婚,请来了n对夫妻,所有人坐在同一张桌子上吃饭,这张桌子是长方形的可以坐两排人,有如下限制 (1) 新娘和新郎不做同一侧. (2) 每对来的夫妻也不能坐在同一侧. (3 ...
- Nessus扫描器的使用
目录 Nessus Scans Settings 一个基本扫描的建立 自定义扫描策略 Nessus的高级扫描方法 Nessus Nessus号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组 ...
- Python技术栈性能测试工具Locust入门
Locust是一款Python技术栈的开源的性能测试工具.Locust直译为蝗虫,寓意着它能产生蝗虫般成千上万的并发用户: Locust并不小众,从它Github的Star数量就可见一斑: 截止文章写 ...
- 求曲线y=lnx在区间(2,6)内的一条切线,使得该切线与直线x=2,x=6及曲线y=lnx所围成的图形的面积最小。
求曲线y=lnx在区间(2,6)内的一条切线,使得该切线与直线x=2,x=6及曲线y=lnx所围成的图形的面积最小. 1.先画图. 2.设切点为(a,lna) (2<a<6) 3.切线方程 ...
- PHP基础-常用的数组相关处理函数
一 数组键/值操作有关的函数 1. array_values()//获取数组中所有的值 $lamp=array("os"=>"linux", " ...
- 异常检测算法Robust Random Cut Forest(RRCF)关键定理引理证明
摘要:RRCF是亚马逊发表的一篇异常检测算法,是对周志华孤立森林的改进.但是相比孤立森林,具有更为扎实的理论基础.文章的理论论证相对较为晦涩,且没给出详细的证明过程.本文不对该算法进行详尽的描述,仅对 ...
- linux 发送邮件
参考资料:https://www.cnblogs.com/imweihao/p/7250500.html https://blog.csdn.net/liang19890820/article/det ...
- 【tee小白的第一篇随笔】keystone代码略读
武大信安在读,最近在自学Risc-v架构的可信执行环境. (实验报告多半是为了交差.临时起意写写博客,分享一些自己读代码的心得理解.) 本篇内容由队和我友总结而成,如有错误欢迎指正交流. keysto ...
- centos7安装es6.4.0
一.首先进入到opt文件夹cd opt二.然后下载es安装包wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearc ...
- 【BUAA软工】Visual Lab Online——功能规格说明书
项目 内容 班级:北航2020春软件工程 博客园班级博客 作业:明确和撰写软件的功能规格说明书 功能规格说明书 当前版本:v1.0 修订历史: 版本号 修订时间 修订说明 v1.0 2020/04/0 ...