结构上的 C++ 中的比较器函数
Comparator function in c++ on structures
在过去的几天里,我一直在尝试解决这个问题,但我无法找到比较函数编码方式的解决方案。 我正在尝试做的是按降序对分数进行排序,如果分数相同,则根据它们的名称按字典顺序对它们进行排序。下面是代码和预期输出以及我的输出。
法典
#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;
}
}
相关文章:
- 函数类作为比较器
- 什么是自定义比较器以及如何在 C++ 的排序函数中使用它?
- 没有默认构造函数作为模板参数的自定义比较器
- 对没有比较器或λ函数的向量进行排序?
- 使用迭代器的自定义比较器函数
- 用于基于成员字段或函数创建比较器的快捷方式
- 为什么在类或结构中传递自定义比较器函数?
- 排序函数和优先级队列 C++ 中的比较器
- 为什么当我们使用等于'='符号比较器函数时,c ++的内置排序函数不起作用?
- 为模板类中的特定类型编写比较器函数
- 无法使用比较器初始化标准::函数
- 通过函数指针对类内的 STL SET 使用自定义比较器
- 下面的比较器函数在 c++ 中如何工作?
- 如何在类中从排序调用比较器函数C++
- sort() 方法 c++ 中的比较器函数.为大量数字获得不同的解决方案
- 如何将比较器添加到自定义排序函数
- 如何为数据类型 vector<glm::vec3> (opengl 数据类型) 编写 std::minmax 函数的自定义比较器
- C++函数来返回基于参数的比较器通用映射类型?
- 如何使用特定构造函数使用STL Priority_queue 比较器
- 为什么函数比较器不像在排序中那样在优先级队列中工作?