map的基本应用--hdu--1004&&poj--2643

两道map的基本题,需要注意的东西都在注释里了。


代码如下

hdu 1004

#include<iostream>
#include<cstdio>
#include<map>
#include<cstring>
using namespace std;

int main()
{
    map<string,int>m;
    int n,i,Max;
    string str;
    while(cin>>n&&n)
    {
          m.clear();   //清空map,避免上次的数据对此次产生影响 
          for(i=0;i<n;i++)
          {
              cin>>str;
              m[str]++;  //map内int型对应的初值为0 
          } 
          Max=0;
          map<string,int>::iterator ite;  //声明map的迭代器
          for(ite=m.begin();ite!=m.end();ite++)  //遍历map
          {
              if(ite->second>Max)//first,second都必须用"->"的形式访问,而不用"." 
              {
                   Max=ite->second;   //访问map中的前后两个元素 
                   str=ite->first;
              }
          } 
          cout<<str<<endl; 
    }
 return 0;
} 

poj  2643

#include<iostream>
#include<cstring>
#include<cstdio>
#include<map>
using namespace std; 

int main()
{
    map<string,string>m1;
    map<string,int>m2;
    string str1,str2;
    int i,j,k,n,m,Max,flag;
    while(cin>>n)
    {
        m1.clear();m2.clear();
        getchar();   //首次使用getline前注意吃掉回车 
        for(i=0;i<n;i++)
        {
             getline(cin,str1);
             getline(cin,str2);
             m1[str1]=str2;
        }
        cin>>m;
        getchar();
        for(i=0;i<m;i++)
        {
            getline(cin,str1);  
            //这题目有病,把满足题目中要求的这句去掉才能过             
           // string s=m1[str1];  //str1对应的关键字不存在则返回空字符串 
           // if(s.size()==0) 
                //continue;
          // if(m1.find(str1)==m1.end())   //必须调用find方法 m1[str1]==m1.end()是错的 
              // continue;
            m2[str1]++;
        }
        Max=0;flag=0;
        map<string,int>::iterator ite;
        for(ite=m2.begin();ite!=m2.end();ite++)
            if(ite->second>Max)
            {
                 Max=ite->second;
                 str1=ite->first;
            }
        for(ite=m2.begin();ite!=m2.end();ite++)
            if(ite->first!=str1&&ite->second==Max)
            {
                 flag=1;
                 break;
            }
        if(flag)
           cout<<"tie"<<endl;
        else
           cout<<m1[str1]<<endl;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值