map的基本操作函数:
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
erase() 删除一个元素
find() 查找一个元素
insert() 插入元素
size() 返回map中元素的个数
swap() 交换两个map
HDU 1004(出现字母次数最多)
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
map<string, int> mp;
int n;
string str;
while (cin>> n && n > 0)
{
mp.clear();
while (n--)
{
cin >> str;
mp[str]++;
}
int max = 0;
string maxColor;
map<string, int>::iterator iter;
for (iter = mp.begin(); iter != mp.end(); iter++)
{
if (iter->second > max)
{
max = (*iter).second;
maxColor = (*iter).first;
}
}
cout << maxColor << endl;
}
return 0;
}
计蒜客
1 8 2 1 1 2 2 2 1 1 1 4 2 1 1 2 2 2 2 2 1 4 0 0 1 1 1 1 1 1
输出 3
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pp;
map<pp,pp> mp;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
int ans=-1;
for(int i=1; i<=n; i++)
{
int k;
scanf("%d",&k);
for(int j=1; j<=k; j++)
{
int x,y;
scanf("%d%d",&x,&y);
if(mp[pp(x,y)].second==i-1)
mp[ pp(x,y) ].first++;
else if(mp[pp(x,y)].second==i)
continue;
else mp[ pp(x,y) ].first = 1;
ans=max(ans,mp[pp(x,y)].first);
mp[pp(x,y)].second=i;
}
}
printf("%d\n",ans);
}
return 0;
}
Segmentation
写他主要是想表达一对多时
1 pair<int , int>pp;
map<pair, pair>mp;
2 map<node, node>
3 map<string, int >mp1;
map<string, int>mp2;
为什么不写map<char , int>,这会报错!!!
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <map>
#include <string>
using namespace std;
struct node
{
int num, t;
};
map<string, node>mp;
int r1, r2, r3, r4;
int f1, f2, f3, f4;
int main()
{
scanf("%d%d%d%d", &r1, &r2, &r3, &r4);
scanf("%d%d%d%d", &f1, &f2, &f3, &f4);
int n;
scanf("%d", &n);
int a;
char str[66];
int f, r;
for(int k=1; k<=n; k++)
{
scanf("%d %s", &a, str);
if(a==1)
{
mp[str].num++;
mp[str].t=k;
}
else
{
if(mp[str].num)
{
f=mp[str].num;
r=k-mp[str].t;
if(f<=f1&&r<=r1)
printf("New Customer\n");
else if(f<=f1&&r<=r2)
printf("Promising\n");
else if(f<=f3&&r<=r2)
printf("Potential Loyalist\n");
else if(r<=r3&&f<=f2)
printf("About to Sleep\n");
else if(r<=r3&&f<=f3)
printf("Need Attention\n");
else if(f>f4&&r<=r1)
printf("Champion\n");
else if(r<=r3)
printf("Loyal Customer\n");
else if(r<=r4&&f<=f2&&f>f1)
printf("Hibernating\n");
else if(r>r4&&f>f4)
printf("Can't Lose Them\n");
else if(f<=f2)
printf("Lost\n");
else
printf("About to Leave\n");
}
else
{
printf("None\n");
}
}
}
return 0;
}
HDU 2112 (map记录名称)
#include <iostream>
#include <cstdio>
#include <map>
#include <cstring>
using namespace std;
#define MAX 155
#define INF 0xfffffff
int p[MAX][MAX];
int vis[MAX], dis[MAX];
int n;
int Dijkstra(int s, int n)
{
int i, j;
for(i=1;i<MAX;i++)
{
//dis[i]=0;
vis[i]=0;
}
for(i=1;i<=n;i++)
{
dis[i]=p[i][s];
}
dis[s]=0;
vis[s]=1;
for(i=1;i<=n;i++)
{
int tmp=INF, k;
for(j=1;j<=n;j++)
{
if(vis[j]==0&&dis[j]<tmp)
{
tmp=dis[j];
k=j;
}
}
vis[k]=1;
for(j=1;j<=n;j++)
{
if(vis[j]==0&&dis[j]>dis[k]+p[j][k])
{
dis[j]=dis[k]+p[j][k];
}
}
}
return dis[2];
}
int main()
{
char s1[55], s2[55];
map<string, int>mp;
int i, j, t;
while(scanf("%d", &n)!=EOF&&n!=-1)
{
mp.clear();
for(i=1;i<MAX;i++)
{
for(j=1;j<MAX;j++)
{
p[i][j]=INF;
}
}
scanf("%s%s", s1, s2);
mp[s1]=1;
mp[s2]=2;
int count=3;
int flag=0;
if(strcmp(s1, s2)==0)
{
flag=1;
}
for(i=0;i<n;i++)
{
scanf("%s%s%d", s1, s2, &t);
if(!mp[s1]) mp[s1]=count++;
if(!mp[s2]) mp[s2]=count++;
p[mp[s1]][mp[s2]]=p[mp[s2]][mp[s1]]=t;
}
if(flag)
{
printf("0\n");
}
else
{
Dijkstra(1, count);
printf("%d\n", dis[2]==INF?-1:dis[2]);
}
}
return 0;
}