1、Map的常用用法
map:映射。可以将任何基本类型,结构体,STL容器映射到任何基本类型包括容器。
使用map,需要加map的头文件,#include<map>和using namespace std;
1.1、map的定义
map<typename1,typename2> mp; map<string,int> mp; //如果是字符串到int的映射,必须使用string不能使用char数组。
1.2、map容器元素的访问
map的两种访问方式:下标访问、迭代器访问
1.2.1、下标访问
和访问数组一样。map中键是唯一的
1.2.2、迭代器访问
map<typename1,typename2>::iterator it;
#include<stdio.h> #include<map> using namespace std; int main() { map<char,int> mp; mp['a']=5; mp['b']=10; mp['d']=40; mp['c']=20; mp['c']=30;//20被覆盖 printf("%d ",mp['c']); for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++) { printf("%c %d ",it->first,it->second);//it->first:当前映射的键,it->second:当前映射的值 } //a 5 //b 10 //c 30 //d 40 //map会以键从小到大的顺序自动排序。map内部是使用红黑树实现的,set内部也是。 //建立映射的时候,会自动实现从小到大的排序功能 return 0; }
1.3、map常用函数
1.3.1、find()
find(key):返回键为key的映射,时间复杂度为O(logN)
1.3.2、erase()
删除单个元素:
mp.erase(it):it为需要删除的元素的迭代器。时间复杂度为O(1)
mp.erase(key):key为删除元素的键,时间复杂度为O(logN)
删除区间内的元素,左闭右开[start,end)
1.3.3、size()
1.3.4、clear()
用来清空map,复杂度为O(N)
#include<stdio.h> #include<map> using namespace std; int main() { map<char,int> mp; mp['a']=5; mp['b']=10; mp['d']=40; mp['c']=20; mp['c']=30;//20被覆盖 printf("%d ",mp['c']);//30 mp.erase('b');//删除键为b的映射,也就是b 10 for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++) { printf("%c %d ",it->first,it->second); } //a 5 //c 30 //d 40 map<char,int>::iterator it=mp.find("a"); mp.erase(it);//删除a 5 for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++) { printf("%c %d ",it->first,it->second); } //c 30 //d 40 mp['e']=50; mp['f']=60; map<char,int>::iterator it=mp.find("d"); mp.erase(it,mp.end());//删除区间, d 40 e 50 return 0; }
1.4、map的常见用途
a、建立字符或者字符串与整数之间的映射的时候,使用map
b、判断大整数或者其他类型数据是否存在的时候,map可以当bool数组用
c、字符串和字符串的映射
2018-09-25 19:20:09
@author:Foreordination