STL大法,谁用谁说好!
一、map
map翻译为映射,是STL常用的一种容器。其实,数组也是一种映射,比如int a[100],就是定义了一个从int(键)到int(值)的映射。数组总是将int类型映射到其他基本类型(数组的基本类型),这同时也带来了一个问题,如果我们吧string映射到int,数组就不方便了。这时就可以用map,map可以将任何基本类型(包括STL)映射到任何基本类型(包括STL)。
map的主要功能——
1.map可以将任何基本类型映射到任何基本类型
2.map提供一对一的数据处理,key——value键值对,类型自定,第一个为关键字,第二个为值
3.根据key值快速查找记录,复杂度为O(㏒ n)如果有1000个记录,最多查找10次。
(1)map的定义
map容器定义于map头文件,并存放于std命名空间里,若想要在程序中使用map,则先要写下代码:
#include<map>
using namespace std;
定义map的方法如下:
map<typename,typename> name;
//第一个typename是映射前的类型,第二个是映射后的类型
map的键和值也可以是STL容器,如map<set<int>,int>
(2)map的访问
map两种访问方式,下标访问和迭代器访问
下标访问像普通数组一样,例如先定义map<char,int> mp;,我们就可以通过mp['c']的方式来访问他的对应元素,如mp['c'] = 124;
通过迭代器访问,需要先做如下定义
map<typename,typename>::iterator it;
因为map的每一对映射都有两个typename,所以我们要用it->first访问键 it->second来访问值
例如:
map<char,int> mp;
mp['m'] = 20;
mp['a'] = 40;
mp['r'] = 30;
map<char,int>::iterator it;
for(it = mp.begin() ; it!= mp.end() ; it++)//还可以写auto,省去了map<char,int>::iterator it;
cout<<it->first<<" "<<it->second<<endl;
输出如下
a 40
m 20
r 30
可以看出,map在建立映射的同时,会按照键从小到大排序。这是因为map内部使用红黑树实现,set也是如此(set的解释见我的文章C++STL容器之set)。