map的常用操作

欢迎访问我的STL库介绍

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

声明

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

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

map<string,set<int>> nametoset;//声明成string类型到set<int>类型的映射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 <bits/stdc++.h>
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 <bits/stdc++.h>
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<int,set<int>>的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火星数字20C++
A1054The Dominant Color20C++
A1071Speech Patterns25C++
A1022Digital Library30C++
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小怪兽会微笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值