使用sort()进行降序而不是升序C ++

时间:2015-05-19 18:21:58

标签: c++ arrays sorting

我正在尝试对给定2d数组的行或列的用户进行排序。我的代码可以按升序排序,但不能降序。

void sortArray(int arr[12][12], int index, int row)
{
   if (row == 0)
   {
       sort( arr[index] , arr[index] + 12);
   }
   else 
   {
       int tempArr[12];
       getColArr(arr, tempArr, index);
       sort(tempArr, tempArr + 12);
       for (int i = 0; i < 12; i++)
       {
           arr[i][0] = tempArr[i];
       }
   }
}

如何将其更改为降序?

4 个答案:

答案 0 :(得分:5)

使用std::greater作为std::sort

的第三个参数
std::sort(begin(vec), end(vec),std::greater<int>());

FYI ..当您使用std::sort而没有第三个参数时,第三个参数默认为std::less

答案 1 :(得分:2)

您可以使用反向迭代器rbegin和rend,例如:

int main()
{
    int vec[6] {1,2,3,4,5,6};
    sort(rbegin(vec), rend(vec));

    for (const auto &i : vec) 
        cout << i << " ";
}

输出:6 5 4 3 2 1

或者您可以使用lambda作为排序的第三个参数:

int vec[6] = {1,2,3,4,5,6};
sort(vec, vec+6, [](int i, int j){return i>j;});

如果您没有支持C ++ 11或C ++ 14的编译器,您可以创建自己的比较函数并将其作为第三个参数传递给sort:

bool isGreater(int i, int j)
{
    return i > j;
}

int main()
{
    int vec[6] = {1,2,3,4,5,6};
    sort(vec, vec+6, isGreater);

    for (int i = 0; i != 6; ++i)
        cout << vec[i] << " ";
}

输出:6 5 4 3 2 1

答案 2 :(得分:1)

使用     sort(arr [index],arr [index] + 12,std :: greater());

insted of

sort( arr[index] , arr[index] + 12);

升序排序;

//Sorts the elements in the range [first,last) into ascending order.
std::sort(tempArr, tempArr + 12); // default sort

对于降序排序,

//you can use the comparator, the third argument in sort()
std::sort(tempArr, tempArr + 12, std::greater<int>());

了解更多信息,请参阅http://www.cplusplus.com/reference/algorithm/sort/

答案 3 :(得分:0)

sort只能按升序排序......但您可以选择升序的含义。

如果您sort告诉x yx > y按升序排列,当且仅当operator >时,排序的序列将按照{{升序排列1}},与operator <的降序相同。

您可以编写自己的自定义仿函数来执行此操作或使用lambda,但标准库已经有一个仿函数用于此目的:

using std::sort;
sort(begin(arr), end(arr), std::greater<int>());

在C ++ 14中,您应该使用std::greater<>而不是std::greater<int>