单独定义map map<typename1,typename2>mp,确定映射前类型键key和映射后类型值value
//若为从字符型到整型的映射必须使用string而不能使用char
#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']);//输出30,因为map的键值唯一
return 0;
}
通过迭代器访问
map会以键从小到大的顺序自动排序
#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);//it->first是当前映射的键,it->second是当前映射的值
}
return 0;
}
find(),find(key)返回键为key的映射的迭代器,时间复杂度为O(logN),N为map中映射的个数
#include<stdio.h>
#include<map>
using namespace std;
int main()
{
map<char,int>mp;
mp['a']=1;
mp['b']=2;
mp['c']=3;
map<char,int>::iterator it=mp.find('b');
printf("%c %d\n",it->first,it->second);
return 0;
}
erase() 1、删除单个元素 2、删除一个区间内的所有元素
1、
#include<stdio.h>
#include<map>
using namespace std;
int main()
{
map<char,int>mp;
mp['a']=1;
mp['b']=2;
mp['c']=3;
map<char,int>::iterator it=mp.find('b');
mp.erase(it);//删除b 2
for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++)
{
printf("%c %d\n",it->first,it->second);
}
return 0;
}
2、
#include<stdio.h>
#include<map>
using namespace std;
int main()
{
map<char,int>mp;
mp['a']=1;
mp['b']=2;
mp['c']=3;
map<char,int>::iterator it=mp.find('b');//令it指向键为b的映射
mp.erase(it,mp.end());//删除it之后的所有映射
for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++)
{
printf("%c %d\n",it->first,it->second);
}
return 0;
}
size(),size()用来获得映射的对数,时间复杂度为O(1)
#include<stdio.h>
#include<map>
using namespace std;
int main()
{
map<char,int>mp;
mp['a']=10;
mp['b']=20;
mp['c']=30;
printf("%d\n",mp.size());//3对映射
return 0;
}
clear(),clear()用来清除map中的所有元素,复杂度为O(N)
#include<stdio.h>
#include<map>
using namespace std;
int main()
{
map<char,int>mp;
mp['a']=1;
mp['b']=2;
mp.clear();
printf("%d\n",mp.size());
return 0;
}//清除后输出为0
map常见用途
1、需要建立字符(或字符串)与整数之间映射的题目,使用map可以减少代码量
2、判断大整数或者其他类型整数是否存在的题目,可以把map当bool数组使用