C++STL——Map
Map是以键值对的存放方式存在的。使用之前应该引用关于它的头文件。
常用到的函数
- 插入
//下面三种方式都可以使用
map1.insert(pair<int,char>(1,'a'));
map1.insert(unordered_map<int,char>::value_type(1,'a'));
map1[1] = 'a';
- 遍历
使用迭代器即可,当然也可以使用数组的方式遍历,但是需要满足键是按照顺序来存放的
map<int,char>::iterator iter;//顺序
for(iter = map1.begin();iter!=map1.end();iter++)//begin()为第一个成员,end()为最后一个
{
cout<<iter->first<<" : "<<iter->second<<endl;
}
map<int,char>::reverse_iterator riter; //逆序
for(riter = map1.rbegin(); riter != map1.rend(); riter++)
cout<<riter->first<<" : "<<riter->second<<endl;
- 查找元素
使用find()函数,他返回的是一个迭代器。当然如果只是想得到某键对应的值,也可以直接以map[key]的方式得到对应值。
map<int,char>::iterator iter1;
iter1 = map1.find(3);//注意find的使用方式
if(iter1 != map1.end()) //注意该判断条件
cout<<"Find, the value is "<<iter1->second<<endl;
else
cout<<"Do not Find"<<endl;
- 删除元素
使用erase
//删除1及其值(迭代器的方式)
map<int,char>::iterator iter1;
iter1 = map1.find(1);
map1.erase(iter1);
int a = map1.erase(1); //直接关键字删除,成功返回1,失败返回0
- map清空
map1.erase( map1.begin(), map1.end() );
下面是所有用到的代码
#include <bits/stdc++.h>
#include <map>
using namespace std;
int main()
{
//使用map或者unordered_map时,应该include对应的库文件,注意它没有.h扩展。如#include <map>.
//当然也可以直接写#include <bits/stdc++.h> 这个万能头文件
// unordered_map<int,char> map;//map和unordered_map使用的方式完全相同
//map 有序,键值对。存入的按照键的顺序排序
//查找时用unordered_map更加高效
map<int,char> map1;//给map类型命名时最好不要和类型名相同
//插入方法1 使用pair<>
// map1.insert(pair<int,char>(1,'a'));
// map1.insert(pair<int,char>(2,'b'));
// map1.insert(pair<int,char>(3,'c'));
//插入方法2 使用value_type
// map1.insert(unordered_map<int,char>::value_type(1,'a'));
// map1.insert(unordered_map<int,char>::value_type(2,'b'));
// map1.insert(unordered_map<int,char>::value_type(3,'c'));
//插入方式3 使用数组的方式
map1[2] = 'b';
map1[3] = 'c';
map1[1] = 'a';
//使用insert时,当键已经存在时就插入不了数据了。而使用数组的方式时,它可以覆盖之前的数据
//使用迭代器进行遍历。迭代器的第一个参数为键,第二个为值。并且使用 -> 的方式选择
//顺序迭代器的输出顺序和栈类似,后进先出
map<int,char>::iterator iter;
for(iter = map1.begin();iter!=map1.end();iter++)//begin()为第一个成员,end()为最后一个
{
cout<<iter->first<<" : "<<iter->second<<endl;//1:a 2:b 3:c
}
//反相迭代器
map<int,char>::reverse_iterator riter;
for(riter = map1.rbegin(); riter != map1.rend(); riter++)
cout<<riter->first<<" : "<<riter->second<<endl; //3:c 2:b 1:a
//注意使用迭代器输出时的条件都是 !=
//数组的方式输出(不常用)
int size = map1.size(); //map的大小 3
for(int i = 1;i<=size;i++)
{
cout<<map1[i]<<endl;
}
//只能用于键是有顺序且为连续数的键的情况
//查找:使用find()方式,返回的是一个迭代器
// map<int,char>::iterator iter1;
// iter1 = map1.find(3);//注意find的使用方式
// if(iter1 != map1.end()) //注意该判断条件
// cout<<"Find, the value is "<<iter1->second<<endl;
// else
// cout<<"Do not Find"<<endl;
//删除 erase()
//删除1及其值
// map<int,char>::iterator iter1;
// iter1 = map1.find(1);
// map1.erase(iter1);
int a = map1.erase(1); //直接关键字删除,成功返回1,失败返回0
//map全部清空
// map1.erase( map1.begin(), map1.end() );
map<int,char>::iterator iter2;
for(iter2 = map1.begin();iter2!=map1.end();iter2++)//begin()为第一个成员,end()为最后一个
{
cout<<iter2->first<<" : "<<iter2->second<<endl;//1:a 2:b 3:c
}
//通过键值对的方式进行查找
//cout<<map[2];
return 0;
}

浙公网安备 33010602011771号