STL-map 关联式容器

2 篇文章 0 订阅

map就是一个映射,不过我在程序中对它的处理没有很复杂,大多是把它当成一个下标可以为任意类型的数组。
map在程序中挺常用的,也为字符串处理提供了简便,比如 AtCoder-3941(ABC091 B题)

#include<cstdio>
#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
#define MAXN 105
map<string,int>cnt;
int N,M;
string a[MAXN],b[MAXN];
string temp;
vector<int>ans;
int main()
{
	scanf("%d",&N);
	for(int i=1;i<=N;i++) 
	{
		cin>>a[i];
		cnt[a[i]]++;
	}
	scanf("%d",&M);
	for(int i=1;i<=M;i++) 
	{
		cin>>b[i];
		cnt[b[i]]--;
	}
	map<string,int>::iterator it=cnt.begin();
	int maxx=0;
	while(it!=cnt.end())
	{
		maxx=max(maxx,it->second);	
		it++;
	}
	printf("%d\n",maxx);
}

声明

#include<map>
using namespace std;
map<string,int> m;

这个声明相当于是一个下标为string,值为int的数组,在map里分别是key和value.

迭代器

map<string,int>::iterator it=cnt.begin();

利用迭代器遍历map:

map<string,int>::iterator it=cnt.begin();
	while(it!=cnt.end())
	{
		这里 it->second 就是map里面的值
		it->first 访问的是key,即数组的下标
		it++;
	}

再来一道题 Let the Balloon Rise

#include<cstdio>
#include<iostream>
#include<map>
using namespace std;
int N;
int main()
{
	while(scanf("%d",&N)!=EOF&&N)
	{
		map<string,int> cnt;
		string s,ans;
		for(int i=1;i<=N;i++)
		{
			cin>>s;
			cnt[s]++;
		}
		map<string,int>::iterator it=cnt.begin();
		int maxx=0;
		while(it!=cnt.end())
		{
			if(it->second>maxx)
				maxx=it->second,ans=it->first;
			it++;
		}
		cout<<ans<<endl;
	}
}

  • update 2019.7.15
    count函数用于统计key值在map中出现的次数,map的key不允许重复,因此如果key存在返回1,不存在返回0
mp.count(key)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值