map容器的常用用法详解
【代码】map容器的常用用法详解。
·
1.map翻译为映射,也是常用的STL容器。
map可以将任何基本类型(包含STL容器)映射到任何基本类型(包含STL容器),也就可以建立string型到int型的映射。
如果要使用map,需要添加map头文件,即#include<map>。除此之外,还需要在头文件下面加上一句:“using namespace std;”,这样就可以在代码中使用map了。
2.map的定义:
单独定义一个map:
map<typename1,typename2> mp;
map 和其他STL容器在定义上有点不一样,因为map需要确定映射前的类型(键 key)和映射后类型(值 value),所以需要在<>内填写两个类型,其中第一个是键的类型,第二个是值的类型。如果是int 型映射到 int 型,就相当于是普通int 型数组。
而如果是字符串到整型的映射,必须使用 string 而不能用 char 数组:
map<string,int> mp;
这是因为 char 数组作为数组,是不能被作为键值的。如果想用字符串作映射,必须用 string 。
另外同vector容器一样,map的键和值也可以是STL容器,例如可以将一个set容器映射到一个字符串;
map<set<int>,string> mp;
3.map容器内元素的访问
map一般用两种访问方式:通过下标访问或通过迭代器访问。
4.map的访问方式:
(1)通过下标访问: 直接使用 mp ['c'] 的方式来访问它对应的整数。 需要注意的是,同 set 容器相同,map 中的键是唯一的。
(2)通过迭代器访问:和其他迭代器的定义方式相同:
map<typename1,typename2>:: iterator it;
(3) 访问方式map可以使用 it->first 来访问键,使用 it->second 来访问值。
5.具体实现如下:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#include<map>
int main()
{
map<char,int> mp;
mp['c']=20;
mp['c']=30;
mp['m']=20;
mp['r']=30;
mp['a']=40;
//for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++)
for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++) //运用迭代器依次输出 !! map会以键从小到大的顺序自动排序
{
cout<<it->first<<" "<<it->second<<endl;
}
cout<<mp.size()<<endl;
map<char,int>::iterator it=mp.find('r');
cout<<it->first<<" "<<it->second<<endl;
map<char,int>::iterator tt=mp.find('a');
cout<<tt->first<<" "<<tt->second<<endl; //运用迭代器单个指定输出
//mp.erase(tt); //单个删除
mp.erase('c'); //另一种单个删除
mp.erase(it,mp.end()); //进行区间删除
cout<<mp.size()<<endl; //输出删除后的区间长度
mp.clear();
cout<<mp.size()<<endl;
//cout<<mp['c']<<endl; //输出 mp['c'];
return 0;
}
更多推荐
已为社区贡献1条内容
所有评论(0)