#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct properties{
int index; // student's index number
string name; // name of student
int points; // points of exam
bool sorter(properties a, properties b){
return a.points < b.points;
}
};
int main()
{
properties students[6];
vector<int> v;
for(int i = 0; i < 6; i++){
cin >> students[i].index >> students[i].name >> students[i].points;
}
for(int i = 0; i < 6; i++){
v.push_back(students[i].points);
}
stable_sort(students.begin(), students.end(), sorter);
return 0;
}
我有以下程序,现在我必须扩展它以按照从最高点到最低点的排序顺序打印元素。我需要最小和最简单的代码,因为时间不是我的问题。任何帮助表示赞赏。
更新:我收到两个错误:
error: expected primary-expression before ',' token
error: expected primary-expression before '+' token
在这一行:
sort(properties, properties + 5);
答案 0 :(得分:1)
我会给你一些连续的提示:
创建std :: vector并将数据推送到:
vector<properties> students;
编写比较两个结构的函数并返回比较结果。不要让它成为你的结构的一员。请注意,我已将其重命名为:
bool less_than(properties const& first, properties const& second)
//my fault. Compiler is trying to call std::less<>() function instead of your.
{
return first.points < second.points;
}
调用std :: sort函数:
sort(students.begin(), students.end(), less_than);
students
结构中的数据将按降序排序。
此代码有效:http://ideone.com/iMWcfi
答案 1 :(得分:0)
参见例如https://stackoverflow.com/a/10308722/1467943
bool operator <(const properties &a, const properties &b) {
return a.points < b.points;
}