STL-map 关联式容器

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;
    }
}

猜你喜欢

转载自blog.csdn.net/cqbzlytina/article/details/80063739