map翻译为映射,也是常用的STL容器,在使用map时,需要添加map头文件,#include<map>。
1,map的定义
map<typename1,typename2>mp,typename1是映射前的类型(键key)typename2是映射后类型(值value),如:map<string,int>mp,是int型映射到int型,另外map的键和值也可以是STL容器,例如map<set<int>,string>mp。注:如果是字符串到整型的映射必须使用string 而不是char。
2,map的访问
map的访问有两种方式,一是通过下标访问,二是通过迭代器访问。
下标访问:
#include<stdio.h>
#include<map>
using namespace std;
int main(){
map<char,int>mp;
mp['c']=20;
mp['c']=30;
printf("%d\n",mp['c']);
return 0;
}
迭代器访问:
迭代器的定义:map<typename1,typename2>::iterator it;这样就得到了迭代器it,我们可以使用it->first来访问键,通过it->second来访问值。
#include<stdio.h>
#include<map>
using namespace std;
int main(){
map<char,int>mp;
mp['m']=20;
mp['r']=30;
mp['a']=40;
for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++){
printf("%c %d\n",it->first,it->second);
}
return 0;
}
3,map常见函数
(1)find():find(key)返回键为key的映射的迭代器。
#include<stdio.h>
#include<map>
using namespace std;
int main(){
map<char,int>mp;
mp['m']=20;
mp['r']=30;
mp['a']=40;
map<char,int>::iterator it=mp.find('r');
printf("%c %d\n",it->first,it->second);
return 0;
}
(2)erase()可以删除单个元素和删除整个区间 的元素。
删除单个元素有两种方法,一是mp.erase(it),it是需要删除元素的迭代器。
#include<stdio.h>
#include<map>
using namespace std;
int main(){
map<char,int>mp;
mp['m']=20;
mp['r']=30;
mp['a']=40;
map<char,int>::iterator it=mp.find('r');
mp.erase(it);
for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++){
printf("%c %d\n",it->first,it->second);
}
return 0;
}
二是mp.erase(key)key是要删除映射的键。
#include<stdio.h>
#include<map>
using namespace std;
int main(){
map<char,int>mp;
mp['m']=20;
mp['r']=30;
mp['a']=40;
mp.erase('r');
for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++){
printf("%c %d\n",it->first,it->second);
}
return 0;
}
删除一个区间的元素,mp.erase(first,last),first是需要删除区间的起始迭代器,last是需要删除的区间的末尾迭代器的下一个地址,就是删除区间为[first,last)。
#include<stdio.h>
#include<map>
using namespace std;
int main(){
map<char,int>mp;
mp['m']=20;
mp['r']=30;
mp['a']=40;
map<char,int>::iterator it=mp.find('r');
mp.erase(it,mp.end());
for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++){
printf("%c %d\n",it->first,it->second);
}
return 0;
}
(3)size())用来获得map中映射对数。
(4)clear()清空map中的所有元素。