Fork me on GitHub

C++STL——Map

Map是以键值对的存放方式存在的。使用之前应该引用关于它的头文件。
常用到的函数

  1. 插入
//下面三种方式都可以使用
map1.insert(pair<int,char>(1,'a'));
map1.insert(unordered_map<int,char>::value_type(1,'a'));
map1[1] = 'a';
  1. 遍历
    使用迭代器即可,当然也可以使用数组的方式遍历,但是需要满足键是按照顺序来存放的
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;
  1. 查找元素
    使用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;  
  1. 删除元素
    使用erase
//删除1及其值(迭代器的方式)
map<int,char>::iterator iter1;
iter1 = map1.find(1);
map1.erase(iter1);

int a = map1.erase(1);	//直接关键字删除,成功返回1,失败返回0
  1. 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;	
} 
posted @ 2021-11-29 15:05  kki_m  阅读(50)  评论(0)    收藏  举报