水果搬运问题

水果搬运问题

一组工人搬运一批水果,用一维数组存储工人编号和水果名称以及搬运重量,要求先按水果分组,然后按搬运重量排序输出。
输入描述:
第一行包括一个整数 N(1≤N≤100), 代表工人的个数。接下来的 N 行每行包括两个整数 p 和 q, 分别代表每个
工人的编号和搬运重量,以及一个字符串 m, 代表水果的名称。
输出描述:
先按水果分组,然后按工人的搬运重量从小到大进行排序,并将排序后的信息打印出来。如果工人搬运的重量相同,
则按照编号的大小从小到大排序,并且要求水果的输出次序同输入次序。
示例 1
输入
5
Apple 1 80
Apple 2 62
Apple 4 73
Orange 4 65
Orange 1 90

输出
Apple 2 62
Apple 4 73
Apple 1 80
Orange 4 65
Orange 5 90

#include<iostream>
#include<vector>
#include<string>
#include<map>
#include<algorithm>

using namespace std;

bool Compare(pair<int,int>&a,pair<int,int>&b){
	if(a.second!=b.second){
		return a.second<b.second;
	}
	else{
		return a.first<b.first;
	}
}
int main(){
	int N;
	while(cin>>N){
		map(string,vector<pair<int,int>>) fmap;
		fmap.clear();
		for(int i=0;i<N;i++){
			string name="";
			int id,weight;
			cin>>name>>id>>weight;
			fmap[name].push_back(pair<int,int>(id,weight));
		}
		for(auto it=fmap.begin();it!=fmap.end();it++){
			sort(it->second.begin(),it->second.end(),Compare);
			for(int i=0;i<it->second.size();i++){
				cout<<it->first<<' '<<it->second[i].first<<' '<<it->second[i].second<<endl;
			}
		}
	}
	return 0;
}
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>

using namespace std;

typedef struct Fruits{
	string name;
	int id;
	int weight;
}Fruits;

bool Compare(Fruits&a,Fruits&b){
	if(a.name!=b.name){
		return a.name<b.name;
	}
	else if(a.weight!=b.weight){
		return a.weight<b.weight;
	}
	else{
		return a.id<b.id;
	}
}
int main(){
	int N;
	while(cin>>N){
		vector<Fruits> ft;
		ft.clear();
		for(int i=0;i<N;i++){
			string tmname="";
			int iid,wweight;
			cin>>tmname>>iid>>wweight;
			Fruits fft;
			fft.name=tmname;
			fft.id=iid;
			fft.weight=wweight;
			ft.push_back(fft);
		}
		sort(ft.begin(),ft.end(),Compare);
		for(auto it=ft.begin();it!=ft.end();it++){
			cout<<it->name<<' '<<it->id<<' '<<it->weight<<endl;
		}
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值