社区讨论
求助大佬们sort函数的详细用法
P1093[NOIP 2007 普及组] 奖学金参与者 5已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @lo7n48si
- 此快照首次捕获于
- 2023/10/27 04:31 2 年前
- 此快照最后确认于
- 2023/10/27 04:31 2 年前
先抛出问题在阅读代码是我发现他的排序是从大到小的
sort函数里面在调用一个cmp函数,那么排序关系(从大到小,还是从小到大)与cmp是否有关系,又行该怎么区控制
代码是题解,我开始不会这个sort的用法,所以用了个快排(虽然没通过)
CPP#include<bits/stdc++.h>
using namespace std;
struct stu{//学生信息
int Id;
int Chinese;
int Math;
int English;
int Sum;
};stu a[301];
bool cmp(stu a,stu b)//上面已经解释过了
{
if(a.Sum>b.Sum)
return true;
else if(a.Sum==b.Sum && a.Chinese>b.Chinese)
return true;
else if(a.Sum==b.Sum && a.Chinese==b.Chinese && a.Id<b.Id)
return true;
else
return false;
}
int main()
{
int n,i;
scanf("%d",&n);
for(i=1;i<=n;i++)//数据处理
{
scanf("%d%d%d",&a[i].Chinese,&a[i].Math,&a[i].English);
a[i].Sum=a[i].Chinese+a[i].Math+a[i].English;
a[i].Id=i;
}
sort(a+1,a+n+1,cmp);//STL最棒的快排
for(i=1;i<=5;i++)
printf("%d %d\n",a[i].Id,a[i].Sum);
return 0;
}
我不懂原理,所以原谅我猜测只要把cmp函数定义的参数a , b互换位置就可以做到从小到大排序了。
回复
共 5 条回复,欢迎继续交流。
正在加载回复...