题目

F - 水果 夏天来了~好开心啊,呵呵,好多好多水果~ Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了. Input 第一行正整数N(0

思路

map<(1),(2)>,1,2不只可以是基础数据类型,还是可以自定义类型,经常用自己定义的结构体,在结构体里面还可以再定义一个map,类似循环嵌套一样,map里面是有序排列的,这样的话就是最外面的map排列优先级最高,里面也是这样,这样就可以实现排列的优先级问题,而且map有一个特点就是它的键值是唯一的,天然去重,这道题正好可能会出现同名的水果,用一般数组写的话里面的数据关系很复杂,而用map比较清晰

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
typedef long long ll;
const int maxn=2e5+100;
struct node{
map<string,int> mp; //名字(优先级低),数量
}f[110];
int main()
{
map<string,node> mm; //地点(优先级高),第二个是一个自定义结构体,实际上是一个小map
map<string,int>::iterator mpit;
map<string,node>::iterator mmit;
int t; cin>>t;
while(t--){
mm.clear();
int n; cin>>n;
for(int i=0;i<n;i++){
string name,place;
int cnt;
cin>>name>>place>>cnt;
mm[place].mp[name]+=cnt; //这里map实现了去重操作省去了很多麻烦,直接累加就行了
}
for(mmit=mm.begin();mmit!=mm.end();mmit++){
cout<<mmit->first<<endl;
for(mpit=mmit->second.mp.begin();mpit!=mmit->second.mp.end();mpit++){
cout<<" |----"<<mpit->first<<"("<<mpit->second<<")"<<endl;
}
}
if(t!=0) cout<<endl;
}
return 0;
}