HDU 1263 map

题目

Input
第一行正整数N(0<N<=10)表示有N组测试数据.
每组测试数据的第一行是一个整数M(0<M<=100),表示工有M次成功的交易.其后有M行数据,每行表示一次交易,由水果名称(小写字母组成,长度不超过80),水果产地(小写字母组成,长度不超过80)和交易的水果数目(正整数,不超过100)组成.

Output
对于每一组测试数据,请你输出一份排版格式正确(请分析样本输出)的水果销售情况明细表.这份明细表包括所有水果的产地,名称和销售数目的信息.水果先按产地分类,产地按字母顺序排列;同一产地的水果按照名称排序,名称按字母顺序排序.
两组测试数据之间有一个空行.最后一组测试数据之后没有空行.

Sample Input
1
5
apple shandong 3
pineapple guangdong 1
sugarcane guangdong 1
pineapple guangdong 3
pineapple guangdong 1

Sample Output
guangdong
  |----pineapple(5)
  |----sugarcane(1)
shandong
  |----apple(3)

知识点

 map<pair<string,string>,int>f;
 
1. f.clear();  清空map集合
if(f.find(pair<string,string>(cd,name))!=f.end())
                f[pair<string,string>(cd,name)]+=num;
            else f[make_pair(cd,name)]=num;
            
2.find函数,当数据出现时,它返回数据所在位置的迭代器,
  如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器,
  
3.注意  f.find(pair<string,string>(cd,name)  的写法(find)

4.注意  f[pair<string,string>(cd,name)]  的写法  (key值)

5.如果集合中没有,要新建一个pair
    f[make_pair(cd,name)]
for(map<pair<string,string>,int>::iterator it=f.begin();it!=f.end();it++)

6.注意迭代器的写法  尤其是   map<pair<string,string>,int>::iterator
 c=it->first.first;
            na=it->first.second;
            numm=it->second;
            
7.map<int, int>的元素是key-value对,而first和second分别对应key和value,
  it->first返回当前元素的关键字,it->second返回当前元素的值。
printf("%s\n",t.c_str());

8.将string用printf输出的方法

代码

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
typedef long long ll;
int main()
{
    int m,n;
    cin>>n;
    map<pair<string,string>,int>f;
    while(n--)
    {
        f.clear();
        int num;
        string cd,name;
        scanf("%d",&m);
        for(int i=1;i<=m;i++)
        {
            cin>>name>>cd>>num;
            if(f.find(pair<string,string>(cd,name))!=f.end())
                f[pair<string,string>(cd,name)]+=num;
            else f[make_pair(cd,name)]=num;
        }
        string c,na,t="***";int numm;
        for(map<pair<string,string>,int>::iterator it=f.begin();it!=f.end();it++)
        {
            c=it->first.first;
            na=it->first.second;
            numm=it->second;
            if(t!=c)///产地不同就输出
            {
                t=c;
                printf("%s\n",t.c_str());///将string用printf输出的方法
            }
            printf("   |----%s(%d)\n",na.c_str(),numm);
        }
        if(n)printf("\n");
    }
    return 0;
}

发布了46 篇原创文章 · 获赞 0 · 访问量 1138

猜你喜欢

转载自blog.csdn.net/weixin_45719073/article/details/104451233