结构上的 C++ 中的比较器函数

Comparator function in c++ on structures

本文关键字:函数 比较器 C++ 结构上      更新时间:2023-10-16

在过去的几天里,我一直在尝试解决这个问题,但我无法找到比较函数编码方式的解决方案。 我正在尝试做的是按降序对分数进行排序,如果分数相同,则根据它们的名称按字典顺序对它们进行排序。下面是代码和预期输出以及我的输出。

法典

#include<bits/stdc++.h>
using namespace std;
struct Player {
    string name;
    int score;
}; 
int compare(Player p,Player q)
{
    if(p.score==q.score)
    return p.name.compare(q.name);
    else
    return q.score-p.score;
}
vector<Player> comparator(vector<Player> players) {
    sort(players.begin(),players.end(),compare);
    return players;
}
int main() {
    int n;
    cin >> n;
    vector< Player > players;
    string name;
    int score;
    for(int i = 0; i < n; i++){
        cin >> name >> score;
        Player p1;
        p1.name = name, p1.score = score;
        players.push_back(p1);
    }
    vector<Player > answer = comparator(players);
    for(int i = 0; i < answer.size(); i++) {
        cout << answer[i].name << " " << answer[i].score << endl;
    }
    return 0;
}

我的输出:

aleksa 150
aakansha 75
heraldo 50
david 100
amy 100

正确的输出

aleksa 150
amy 100
david 100
aakansha 75
heraldo 50

假设你正在使用一个比较函数来输入 std::sort 方法,你的函数应该返回一个布尔值。以 == 开头的 if 块并在没有 abs 运算符的情况下返回分数之间的差异,使逻辑有点混乱。

基本上,当您返回 int 类型并且它不等于 0 时,它被视为 true。因此,即使 q.score> p.score 或 p.score> q.score,你的 else 块也只会返回 true。

字符串的字典顺序比较方法有很多种: 这里讨论了其中一些。

bool compare(Player p, Player q){
    if(p.score == q.score){
        return p.name > q.name;
    }
    else{
        return p.score > q.score;
    }
}