问题 C: 销售排行榜

题目描述

你的任务是帮助淘宝网店店长整理销售数据,根据累计的销售记录,将所有商品按销售数量降序排列。

输入格式

输入包括多行数据(行数小于100000),每行数据包括4个信息,分别是商品名称、销售数量、单价、成交日期

商品名称由小写字母组成,且不超过100个字符,销售数量和单价都是正整数,且小于10000

输出格式

输出包括多行数据,将所有在输入中出现的商品按销售数量降序排列,每行数据包括3个信息,分别是商品名称、销售数量、销售额,如果两种商品销售数量一样,则按商品的字母顺序升序排列

输入样例 复制

apple 1 20 2014-4-2 
basketball 1 20 2014-4-2
computer 1 20 2014-4-2
shoe 1 20 2014-4-2
tv 1 20 2014-4-2
apple 1 18 2014-4-3 

输出样例 复制

apple 2 38
basketball 1 20
computer 1 20
shoe 1 20
tv 1 20

数据范围与提示

 

分类标签

数据结构-散列表 

#include <iostream>

#include <map>

#include <string>

using namespace std;

struct SaleInfo{

    int number;

    int saleVolume;

};

int main()

{

    map<string,SaleInfo>mp;

    string goodName,datetime;

    int number,price;

    while(cin>>goodName>>number>>price>>datetime){

        if(mp.find(goodName)==mp.end()){

            SaleInfo si;

            si.number=si.saleVolume=0;

            mp[goodName]=si;

        }

        mp[goodName].number+=number;

        mp[goodName].saleVolume+=(number*price);

    }

    while(mp.size()>0){

        map<string,SaleInfo>::iterator itMax=mp.begin();

        for(map<string,SaleInfo>::iterator it=mp.begin();it!=mp.end();it++){

            if(it->second.number>itMax->second.number){

                itMax=it;

            }

        }

        cout<<itMax->first<<" "<<itMax->second.number<<" "<<itMax->second.saleVolume<<endl;

        mp.erase(itMax);

         

    }

    return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值