C++结构体自定义排序实例

题目

小H所在的学院的一共有 n 个人.

一个学期结束了, 小H知道全年级所有人的绩点, 现在他想知道从高到低排序之后的全年级所有人的绩点是多少. 若两人绩点相同, 则按照名字的字典序从小到大排序. 保证所有人的名字不同.

我们说字典序 S1 < S2 当且仅当满足下列条件之一:

1. S1 是 S2 的前缀.

2. 存在一个 k , 使得 S1 的前 k 个字母与 S2 相同, 且第 k + 1 个字母在字母表中的位置在 S2 的第 k + 1 个字母在字母表中的位置的前面.

输入

输入包含 n + 1 行.

第一行一个整数 n (1 ≤ n ≤ 5 × 104)表示年级人数.

接下来 n 行, 第 i 行包含一个字符串 Si 代表第 i 个人的名字(Si的长度不超过 20 个字符, 并且只有小写字母), 和一个保留两位小数的绩点 ai (0.00 ≤ ai ≤ 4.00).

保证所有人的名字不同.

输出

输出包含 n 行.

第 i 行包含一个字符串表示从高到低排序后的第 i 个人的名字, 和一个数字(保留两位小数)表示他的绩点.

输入示例

10
mashiroshiina 3.68
emilia 3.70
rem 3.70
violetevergarden 3.75
eruchitanda 3.52
megumin 3.95
setsuna 3.85
kurumitokisaki 3.58
homuraakemi 3.76
maisakurajima 4.00

输入示例

maisakurajima 4.00
megumin 3.95
setsuna 3.85
homuraakemi 3.76
violetevergarden 3.75
emilia 3.70
rem 3.70
mashiroshiina 3.68
kurumitokisaki 3.58
eruchitanda 3.52
#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
using namespace std;

struct Student
{
	string name;
	float credit;
};

bool cmp(Student s1,Student s2)//自定义排序标准
{
	if(s1.credit != s2.credit)
	{
		return s1.credit>s2.credit;
	}
	return s1.name < s2.name;
}

int main()
{
	int n;
	cin>>n;
	Student *p = new Student[n];
	for(int i = 0; i < n; i++)
	{
		cin>>p[i].name>>p[i].credit;
 	}
	sort(p,p+n,cmp);
	for(int i = 0; i < n; i++)
	{
		cout<<p[i].name;
		printf(" %.2f\n",p[i].credit);
 	}
return 0;
}

觉得还行或者一般麻烦点个赞再走呗,球球

我是菜鸟,有问题欢迎指正哦

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值