在C ++中对struct中的元素进行排序

时间:2013-12-25 12:50:34

标签: c++ sorting struct

#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);

2 个答案:

答案 0 :(得分:1)

我会给你一些连续的提示:

  1. 创建std :: vector并将数据推送到:

    vector<properties> students;
    
  2. 编写比较两个结构的函数并返回比较结果。不要让它成为你的结构的一员。请注意,我已将其重命名为:

    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;    
    }  
    
  3. 调用std :: sort函数:

    sort(students.begin(), students.end(), less_than); 
    
  4. students结构中的数据将按降序排序。

  5. 此代码有效: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;
}