@ HIT2023112282```如果有多个总分相同的学生,输出靠前的那位```。
by Pitiless_boy @ 2023-10-17 20:25:18
@[HIT2023112282](/user/1089582)
by Pitiless_boy @ 2023-10-17 20:25:51
所以要改成这样:
```
#include<bits/stdc++.h>
using namespace std;
struct Stu {
string name;
int chi, math, eng;
int sum, id;//id 存编号
} a[1010];
bool cmp(Stu x, Stu y) {
return (x.sum > y.sum) || ((x.sum == y.sum) && (x.id < y.id));// 总分多的排前面,总分一样编号小的排前面。
}
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i].name >> a[i].chi >> a[i].math >> a[i].eng;
a[i].sum = a[i].chi + a[i].eng + a[i].math;
a[i].id = i;
}
sort(a + 1, a + 1 + n, cmp);
cout << a[1].name << " " << a[1].chi << " " << a[1].math << " " << a[1].eng;
return 0;
}
```
by Pitiless_boy @ 2023-10-17 20:29:06
我记得cmp是要求绝对顺序的,也就是不能a>b且b>a。
所以要改成>号罢?不然就是乱七八糟了。
by Kazeno_Akina @ 2023-10-17 20:30:00
@[DoraYaoxy](/user/612567)
这个是没关系的。
by Wanderer_01 @ 2023-10-17 20:31:49
@[Wanderer_01](/user/544935) 分班考试有个同学因为这么写最小生成树就挂来着,我记得是。
by Kazeno_Akina @ 2023-10-17 20:33:06
@[Wanderer_01](/user/544935) 但是确实是有关系的
<https://zh.cppreference.com/w/cpp/algorithm/sort>
<https://zh.cppreference.com/w/cpp/named_req/Compare>
> 类型要求
> - Compare 必须符合比较 (Compare) 的要求。
>
> 建立具有下列性质的[严格弱序](https://en.wikipedia.org/wiki/Strict_weak_ordering)关系
>
> 对于所有 a,`comp(a,a)==false`
>
> 若 `comp(a,b)==true` 则 `comp(b,a)==false`
>
> 若 `comp(a,b)==true` 且 `comp(b,c)==true` 则 `comp(a,c)==true`
by Argvchs @ 2023-10-17 20:35:49
~~~
(x.sum > y.sum) || ((x.sum == y.sum) && (x.id < y.id))
~~~
这应该是两种不同的关键字吧。
by Wanderer_01 @ 2023-10-17 20:41:46
@[Wanderer_01](/user/544935) 双关排序啊?没问题吧
by Pitiless_boy @ 2023-10-17 20:45:01
@[Pitiless_boy](/user/1011137) 用了id加上排序确实可以过了
by HIT2023112282 @ 2023-10-18 20:50:33