按降序排序向量c ++

时间:2018-04-27 19:40:36

标签: c++ sorting dictionary iterator

我试图按照学生的平均分数降序排序矢量,但我不知道这样做的正确方法是什么? 。现在是我的代码。

          void sortDes()
       {
       int len = students.size();
       for(int i = 0; i < len; i++)
       {
            for(int j = 0;j < len - 1; j++)
            {
              if(students[j].average()> students[j+1].average())
               {

                swap(students[j+1], students[j]);
               }
             }
        } 

       }

1 个答案:

答案 0 :(得分:1)

std::sortstd::greater一起使用,如下所示:

#include <functional>
#include <vector>
#include <algorithm>
int main()
{
    std::vector<int> Vec {2,5,4,8,1,2,2};
    std::sort(Vec.begin(), Vec.end(), std::greater<int>());// After sort will be 8,5,4,2,2,2,1
    return 0;
}

在你的情况下,它将是:

std::sort(students.begin(), students.end(), std::greater<int>());

对于您的CStudent覆盖运算符&gt;像这样:

class CStudent
{
public:
    bool operator > (CStudent& cmp1)
    {
        //Do your own calculations here
        if ( cmp1.val < val )
        {
            return true;
        }

        return false;
    }
private:
    int val;
};

然后用lambda调用sort:

//...
    std::sort(Vec.begin(), Vec.end(), [](CStudent& cmp1, CStudent& cmp2  )->bool{return cmp1 > cmp2;});
//...