首页 > 解决方案 > 如何按降序对标准数组进行排序 - C++ 11

问题描述

有一些资源可用于按降序对数组进行排序:

https://www.includehelp.com/stl/sort-an-array-in-descending-order-using-sort-function.aspx

如何在 ASC 和 DESC 模式下对 C++ 数组进行排序?

https://www.geeksforgeeks.org/sort-c-stl/

但没有一个解决为 astd::array而不是原始int myArr[]类型执行此操作的问题。

我有这样的代码:

#include <iostream>
#include <array>
#include <string>
#include <algorithm>
#include <functional>

using namespace std;

int main(){

    array<int, 5> myArray = {30, 22, 100, 6, 0};

    for(int item : myArray){
        cout << item << endl;
    }

    sort(myArray.begin(), myArray.end());

    cout << "NOW, SORTED: " << endl;

    for (int otheritem: myArray){
        cout << otheritem << endl;
    }

}

产生:

30
22
100
6
0
NOW, SORTED:
0
6
22
30
100

但是,我正在尝试生成此输出:

100
30
22
6
0

通过按降序对数组进行排序。我已经尝试按照上面 SO 帖子中的提示进行操作:

sort(myArray, myArray.size()+n, greater<int>());

但这会产生错误:

no instance of overloaded function "sort" matches the argument list -- argument types are: (std::array<int, 5ULL>, unsigned long long, std::greater<int>)

我怎样才能standard arrayint降序排序?

标签: c++arrayssortingc++11

解决方案


与原始数组不同,std::array不会隐式转换为指针(即使您可以从 显式获取指针std::array::data),您应该使用begin()and end(),这通常用于从 STL 容器获取迭代器。例如

sort(myArray.begin(), myArray.end(), greater<int>());

或者

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

PS:后者也适用于原始数组。


推荐阅读