头文件 #include<map>
using namespace std;
map,翻译为映射,映射的意思很简单,例如一本书,翻看目录,找到了所需知识的位置,然后,找到具体的知识;例如数组,字符数组就是建立了int 与 char之间的映射,double类型的数组就是建立了int 与double之间的映射,而map可以建立任何基本类型之间的映射(包括STL容器)
例如,map可以建立string 与 int之间的映射;
1.map的定义
map<typename1,typename2> ans;
typename1,相当于目录(键key)
typename2,相当于具体的知识(值value);
如果想要是字符串到整型的映射,字符串就必须使用string,而不能使用char数组
map<string,int> ans;
2.map容器内元素的访问
(1)通过下标访问
和访问普通数组一样,看代码
#include<iostream>
#include<map>
using namespace std;
int main()
{
map<char,int> ans;
ans['c']=20;
ans['c']=30;//20被覆盖;
cout<<ans['c'];
return 0;
}
输出结果
30
(2)通过迭代器访问
迭代器定义
map<typename1,typename2>::iterator bns;
示例:
map<char,int>::iterator bns;
map可以通过使用bns->first访问typename1,
bns->second访问typename2;
#include<iostream>
#include<map>
using namespace std;
int main()
{
map<char,int> ans;
ans['a']=20;
ans['b']=30;
ans['c']=40;
for(map<char,int>::iterator bns=ans.begin();bns!=ans.end();bns++)
{
cout<<bns->first<<" "<<bns->second<<endl;
}
return 0;
}
输出结果
a 20
b 30
c 40
map会以typename1的大小为排序标准自动排序
a<b<c
那么就会先输出a映射的值;然后依次输出;
3.map常用函数
(1)find()
find(key)返回键为key的映射的迭代器
#include<iostream>
#include<map>
using namespace std;
int main()
{
map<char,int> ans;
ans['a']=20;
ans['b']=30;
ans['c']=40;
map<char,int>::iterator bns=ans.find('b');
cout<<bns->first<<" "<<bns->second<<endl;
return 0;
}
输出结果
b 30
(2)erase()
①删除单个元素
方法一
ans.erase(bns)
bns为所需要删除元素的迭代器
#include<iostream>
#include<map>
using namespace std;
int main()
{
map<char,int> ans;
ans['a']=20;
ans['b']=30;
ans['c']=40;
map<char,int>::iterator bns=ans.find('b');
ans.erase(bns);
for(map<char,int>::iterator bns=ans.begin();bns!=ans.end();bns++)
cout<<bns->first<<" "<<bns->second<<endl;
return 0;
}
输出结果
a 20
c 40
方法二
#include<iostream>
#include<map>
using namespace std;
int main()
{
map<char,int> ans;
ans['a']=20;
ans['b']=30;
ans['c']=40;
ans.erase('b');
for(map<char,int>::iterator bns=ans.begin();bns!=ans.end();bns++)
cout<<bns->first<<" "<<bns->second<<endl;
return 0;
}
输出结果
a 20
c 40
②删除一个区间
ans.erase(first,last)
first为起始迭代器,last为末尾迭代器的下一个地址,也就是一个左闭右开的区间[first,last)
#include<iostream>
#include<map>
using namespace std;
int main()
{
map<char,int> ans;
ans['a']=20;
ans['b']=30;
ans['c']=40;
map<char,int>::iterator bns=ans.find('b');
ans.erase(bns,ans.end());
for(map<char,int>::iterator bns=ans.begin();bns!=ans.end();bns++)
cout<<bns->first<<" "<<bns->second<<endl;
return 0;
}
输出结果
a 20
(3)size()
ans.size()返回映射的对数
#include<iostream>
#include<map>
using namespace std;
int main()
{
map<char,int> ans;
ans['a']=20;
ans['b']=30;
ans['c']=40;
cout<<ans.size()<<endl;
return 0;
}
输出结果
3
(4)clear()
清空map中所有映射的对数
#include<iostream>
#include<map>
using namespace std;
int main()
{
map<char,int> ans;
ans['a']=20;
ans['b']=30;
ans['c']=40;
ans.clear();
cout<<ans.size()<<endl;
return 0;
}
输出结果
0
感谢大家的时间!