STL容器(map)————HDU例題
阿新 • • 發佈:2019-01-07
map 的使用 注意first 為key值 second 是value值
然後就是在杭電上標頭檔案對於map的map<string,int >::iterator i;的操作。使用#include<cstring>會編譯錯誤。。<string>則不會
對於hdu1263,由於map<string,int>儲存是按KEY值的字母順序排序,所以這裡免去了排序的步驟。
STL很強大!
hdu1004:
[cpp] view plain copy print?- #include<iostream>
- #include<string>
- #include<map>
- usingnamespace std;
- map<string,int>M;
- map<string,int>::iterator p,q;
- int n;
- int main()
- {
- string str;
- while(scanf("%d",&n),n)
- {
- M.clear(); //清空
- while(n--)
- {
- cin>>str;
- if(M[str]==0) //插入
- M[str]=1;
- else
- M[str]++;
- }
- int k=-1;
- for(p=M.begin();p!=M.end();p++) //查詢
- {
- if((p->second)>k)
- {
- k=p->second;
- q=p;
- }
- }
- cout<<q->first<<endl;
- }
- return 0;
- }
#include<iostream>
#include<string>
#include<map>
using namespace std;
map<string,int>M;
map<string,int>::iterator p,q;
int n;
int main()
{
string str;
while(scanf("%d",&n),n)
{
M.clear(); //清空
while(n--)
{
cin>>str;
if(M[str]==0) //插入
M[str]=1;
else
M[str]++;
}
int k=-1;
for(p=M.begin();p!=M.end();p++) //查詢
{
if((p->second)>k)
{
k=p->second;
q=p;
}
}
cout<<q->first<<endl;
}
return 0;
}
然後是hdu1075
- #include <stdlib.h>
- #include <iostream>
- #include <stdio.h>
- #include<string>
- #include<map>
- usingnamespace std;
- map<string,string> m;
- map<string,string>::iterator it;
- char c[3020];
- int main()
- {
- char s[22],t[22],tmp[22];
- scanf("%s",s);
- while(scanf("%s",s)!=EOF)
- {
- if(!strcmp(s,"END"))
- break;
- scanf("%s",t);
- m[t]=s;
- }
- scanf("%s",s);
- getchar();
- while(gets(c))
- {
- if(!strcmp(c,"END"))
- break;
- int len=strlen(c);
- int j=0;
- for(int i=0;i<len;i++)
- {
- if(c[i]>='a'&&c[i]<='z')
- {
- tmp[j]=c[i];
- j++;
- }
- else
- {
- tmp[j]='\0';
- it=m.find(tmp);
- if(it!=m.end())
- {
- char ww[22];
- //ww=it->second;
- cout<<it->second;
- //printf("%s",it->second);
- }
- else
- {
- printf("%s",tmp);
- }
- printf("%c",c[i]);
- j=0;
- }
- }
- printf("\n");
- }
- return 0;
- }
#include <stdlib.h>
#include <iostream>
#include <stdio.h>
#include<string>
#include<map>
using namespace std;
map<string,string> m;
map<string,string>::iterator it;
char c[3020];
int main()
{
char s[22],t[22],tmp[22];
scanf("%s",s);
while(scanf("%s",s)!=EOF)
{
if(!strcmp(s,"END"))
break;
scanf("%s",t);
m[t]=s;
}
scanf("%s",s);
getchar();
while(gets(c))
{
if(!strcmp(c,"END"))
break;
int len=strlen(c);
int j=0;
for(int i=0;i<len;i++)
{
if(c[i]>='a'&&c[i]<='z')
{
tmp[j]=c[i];
j++;
}
else
{
tmp[j]='\0';
it=m.find(tmp);
if(it!=m.end())
{
char ww[22];
//ww=it->second;
cout<<it->second;
//printf("%s",it->second);
}
else
{
printf("%s",tmp);
}
printf("%c",c[i]);
j=0;
}
}
printf("\n");
}
return 0;
}
最後hdu1263
- #include<iostream>
- #include<string>
- #include<cstdio>
- #include<map>
- usingnamespace std;
- int main()
- {
- map<string,map<string,int> > a;
- map<string,int> b;
- map<string,map<string,int> >::iterator i;
- map<string,int>::iterator j;
- int T,m,tmp;string s,tb;
- cin>>T;
- while(T--)
- {
- a.clear();
- b.clear();
- cin>>m;
- while(m--)
- {
- cin>>s>>tb>>tmp;
- a[tb][s]+=tmp;
- }
- for(i=a.begin();i!=a.end();i++)
- {
- cout<<i->first<<endl;
- b=i->second;
- for(j=b.begin();j!=b.end();j++)
- {
- cout<<" |----"<<j->first<<"("<<j->second<<")"<<endl;
- }
- }
- if(T!=0)
- printf("\n");
- }
- }
#include<iostream>
#include<string>
#include<cstdio>
#include<map>
using namespace std;
int main()
{
map<string,map<string,int> > a;
map<string,int> b;
map<string,map<string,int> >::iterator i;
map<string,int>::iterator j;
int T,m,tmp;string s,tb;
cin>>T;
while(T--)
{
a.clear();
b.clear();
cin>>m;
while(m--)
{
cin>>s>>tb>>tmp;
a[tb][s]+=tmp;
}
for(i=a.begin();i!=a.end();i++)
{
cout<<i->first<<endl;
b=i->second;
for(j=b.begin();j!=b.end();j++)
{
cout<<" |----"<<j->first<<"("<<j->second<<")"<<endl;
}
}
if(T!=0)
printf("\n");
}
}