C++标准模板库(STL)——map常见用法详解
2024-10-21 10:17:38
- 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
最新文章
- VR技术的高速发展阶段
- android版微信5.2.1更新 支持微信聊天记录备份到电脑上
- linux学习之——学习路线(摘抄)
- 在Windows2008系统中利用IIS建立FTP服务器
- C++静态成员变量和静态成员函数小结
- Linux基础(二)
- C# 经典入门15章 -TabControl
- [Swift]LeetCode259.三数之和较小值 $ 3Sum Smaller
- MYSQL转换编码的解决方法
- laravel框架的注入
- java输入输出流(I/O)总结
- redis使用规范文档 20170522版
- lldb使用
- centos7-vmware克隆后的配置
- contos 7创建阿里云镜像源
- Oracle11g口令过期的解决
- RulersGuides.js – 网站中实现 Photoshop 标尺效果
- 使用jedis2.8.0连接redis
- XRP共识算法
- Right-BICEP 测试四则运算程序