map的常用操作

欢迎访问我的STL库介绍

本文介绍常用的PAT里STL库map的使用,对付PAT考试或其他上机要求足够了

声明

//map完成key->value的映射

map<string,int> nametoid;//声明成string类型到int类型的映射map

map<string,set<int>> nametoset;//声明成string类型到set类型的映射map

//还有多种声明方法,如int-int,string-string,int-vector,比如

map<int,vector<int>> a;
a[1].push_back(1);
cout<<a[1][0];//输出1,注意a[1]就是vector类型了,所以a[1][0]就是vector的第一个元素

//当然,还可以放入结构体,下面会输出1 2
#include 
using namespace std;

struct person{
	int id;
};
int main(){
	map<string,person> a;
	string b="kim";
	a[b].id=1;
	a["jake"].id=2;
	cout<<a[b].id<<" "<<a["jake"].id;
	return 0;
}

插入元素

//上面声明代码中就已经说明了插入方式,这也是最常用的方式
//需要注意的是map的映射具有唯一性,故下面的方式会输出74 18
#include 
using namespace std;

int main(){
	map<int,int> idtoyear;
	idtoyear[1]=21;
	idtoyear[2]=18;
	idtoyear[1]=74;
	cout<<idtoyear[1]<<" "<<idtoyear[2];
	return 0;
}

查找元素

//a.find()会返回一个指针,如果a中没有key 3,则会返回结束指针
map<int,string> a;
if(a.find(3)!=a.end())cout<<a[3];

删除元素

map<int,string> a;

a.erase(a.find(1));//使用指针删除key=1的元素

int n = a.erase(23);//也可以直接删除,删除成功返回1,否则返回0

清空元素

a.erase(a.begin(),a.end());

a.clear();//直接清空也可以

遍历map

//声明对应类型的迭代器
map<string,int> num;//int为string出现的次数
int maxx=-1;
string str;
for(map<string,int>::iterator it=num.begin();it!=num.end();it++){
	if(it->second>maxx){//找到出现最多的string
		maxx=it->second;
		str=it->first;
	}
}
cout<<str;

//再比如想遍历map>的map

map<int,set<int>> change;
map<int,set<int>>::iterator it=change.begin();//遍历map
set<int>::iterator it1=change[i].begin();//遍历i对应的集合

a.empty()

bool flag=a.empty();//为空返回true

a.size()

cout<<a.size();//输出a的大小

map练习题

Title 题目 分值 参考代码
B1044/A1100 火星数字 20 C++
A1054 The Dominant Color 20 C++
A1071 Speech Patterns 25 C++
A1022 Digital Library 30 C++

你可能感兴趣的:(PAT)