c ++中结构上的比较器函数
Comparator function in c++ on structures
过去几天我一直在尝试解决这个问题,但我想不出一个解决比较函数编码方式的方法。我想做的是按降序对分数进行排序,如果分数相同,则根据它们的字典顺序对它们进行排序 name.Below 是代码和预期输出以及我的输出。
代码
#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 方法,您的函数应该 return 一个布尔值。使用 == 开始 if 块,并且 return 在没有 abs 运算符的情况下计算分数之间的差异使得逻辑有点混乱。
基本上,当您 return int 类型并且它不等于 0 时,它被视为 true。因此,即使 q.score > p.score 或 p.score > q.score.
,你的 else 块也只会 return true
字符串的字典序比较有多种方式:Some of them are discussed here。
bool compare(Player p, Player q){
if(p.score == q.score){
return p.name > q.name;
}
else{
return p.score > q.score;
}
}
过去几天我一直在尝试解决这个问题,但我想不出一个解决比较函数编码方式的方法。我想做的是按降序对分数进行排序,如果分数相同,则根据它们的字典顺序对它们进行排序 name.Below 是代码和预期输出以及我的输出。
代码
#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 方法,您的函数应该 return 一个布尔值。使用 == 开始 if 块,并且 return 在没有 abs 运算符的情况下计算分数之间的差异使得逻辑有点混乱。
基本上,当您 return int 类型并且它不等于 0 时,它被视为 true。因此,即使 q.score > p.score 或 p.score > q.score.
,你的 else 块也只会 return true字符串的字典序比较有多种方式:Some of them are discussed here。
bool compare(Player p, Player q){
if(p.score == q.score){
return p.name > q.name;
}
else{
return p.score > q.score;
}
}