使用sort()函数进行C++降序排序

4

我正在尝试对用户提供的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];
       }
   }
}

如何将其改为降序?

请参见以下链接:https://dev59.com/8W865IYBdhLWcg3wEKOZ - Javia1492
4个回答

4
你可以使用反向迭代器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作为sort函数的第三个参数:

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] << " ";
}

Output: 6 5 4 3 2 1


4

使用std::sort的第三个参数std::greater

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

提供信息..当您使用std::sort时,如果没有第三个参数,则默认使用std::less


1

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

而不是

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/


0

sort 只能进行升序排序... 但你可以选择什么是升序。

如果你告诉 sort,当且仅当 x > y 时,xy 是按升序排列的,那么排序后的序列将按照 operator > 的升序排列,这与按照 operator < 的降序排列是相同的。

你可以编写自己的自定义函数对象来实现此功能,也可以使用 lambda 表达式,但标准库已经有了一个用于此目的的函数对象:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接