STL——map详细用法

map

map翻译为映射,我们之前所用到的int就是一个int 对int的映射,我们还用到过char ,float,double,string…这都是int转换各个类型的映射。
使用map可以将任意类型的基本类型建立映射映射到任意基本类型,都包括stl的容器
若要使用map需要添加map头文件除此之外还要添加using namespace std;
我们可以看map的一些常用用法

1.map定义

map和其他容器不一样的就是map需要提供映射前类型和映射后类型,所以需要在<>中写两个类型,例如<键类型,值类型>
如果我要使用一个字符串到整形的映射就要做成

map<string,int> mp;

因为是要作为字符串与整形的映射所以不可以用char只能用string
键值还可以是stl容器所以也可以这么写

map<set<int>,string> mp;
2.map容器内元素访问
(1).通过下标访问

和访问普通数组一样建立映射后就可进行访问(map的键值是唯一的)
例如

#include<iostream>
#include<map>
using namespace std;
int main()
{
	map<char,int> mp;
	mp['c']=20;
	mp['c']=30;
	cout<<mp['c']<<endl;
	return 0;
} 
//输出结果为30
(2).通过迭代器访问

map访问迭代器和stl中其他类似

map<char,int>::iterator it;

map迭代器不同的地方就是能访问两个值,所以决定了一个it可以返回键和值,it->first访问键,it->second访问值
例如

#include<iostream>
#include<map>
using namespace std;
int main()
{
	map<char,int> mp;
	mp['m']=20;
	mp['r']=30;
	mp['f']=40;
	for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++)
	{
		cout<<it->first<<' '<<it->second<<endl;
	}
	return 0;
} 
/*
结果为
f 40
m 20
r 30
*/

看到结果后发现map会以键值由大到小进行排序,因为这是由于map内部由红黑树实现,在建立映射过程中由从小到大的排序功能

3.map常用函数
(1)find()

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

mp['a']=1;
mp['b']=2;
map<char,int>::iterator it=mp.find('b');
cout<<it->second<<endl;
//会输出  2
(2)erase()

和其他基本类似有两种用法删除单个元素或者删除一个区间的元素
1.删除单个it为迭代器

mp['a']=1;
mp['b']=2;
map<char,int>::iterator it=mp.find('b');
mp.erase(it);
//删除 b  2

删除一个元素,key是键值

mp['a']=1;
mp['b']=2;
mp.erase('b');
//删除了 b  2

2.删除一个区间的元素mp.erase(first,last),删除的是[first,last)。复杂度为O(last-first)

mp['a']=1;
mp['b']=2;
mp['c']=3;
map<char,int>::iterator it=mp.find('b');
mp.erase(it,mp.end);
//删除了b  2和c  3
(3)size()

返回map中映射的对数时间复杂度为O(1)

(4)clear()

清空map中的所有元素复杂度为O(N),N为元素个数

map的用途

1.大整数建立表的时候用字符串代替
2.要求建立字符串与数字的关系时
3.字符串和字符串的映射可能会用到

eg:C++11中还增加了unordere_map,以散列替代内部红黑树,可以只处理映射不排序,速度要远快于map,有兴趣可以自行了解哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数学小牛马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值