第一次使用对sort编写cmp函数,但不知道哪里有问题,求各位帮忙看一下

P5740 【深基7.例9】最厉害的学生

@ 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


| 下一页