STL中 sort 排序方法

头文件:<algorithm>
排序格式:sort (a,a+n)——  指从a[0]到a[n-1]排序,他有两种形式
(1)默认从小到大排序
(2)加cmp自定义排序方式:sort (a,a+n,cmp),再定义一个比较函
数,通常对条件筛选进行排序一般与结构体连用。
方式:
bool cmp ( int a, int b){
return a>b;}   //表示按照从大到小的顺序,也可与条件句连用
 拓展:
去重:去重的方法有多种,通常可以使用计数排序的方法
另外还有STL中的unique (a,a+n)  指对有序数组a从 a[0]到a[n-1]去重
但他并不是直接去重,是有返回值的,他返回了去重后最后一个元素的指针
要赋值使用。


示例:

每个学生都有3门课的成绩:语文、数学、英语。
先按总分从高到低排序,
如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文
成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确
定的。
任务:最后按排名顺序输出前五名名学生的学号和总分。


#include <iostream>
#include <algorithm>
using namespace std;
const  int ding=400;
struct student {   //结构体的定义
int num,chinese,math,english,total;
};
bool cmp(student a,student b){   //自定义比较函数
if (a.total!=b.total) return a.total >b.total;
if (a.chinese!=b.chinese) return a.chinese > b.chinese;
return a.num<b.num;    //比较条件的建立
}
int main()
{student a[ding];  //结构体的声明
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].chinese>>a[i].math>>a[i].english;
a[i].total=a[i].chinese+a[i].math+a[i].english;
a[i].num=i;
}
sort (a+1,a+1+n,cmp);   //函数的使用
for(int i=1;i<=5;i++){
    cout<<a[i].num<<" "<<a[i].total<<endl;
}
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Assault boy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值