Как отсортировать стандартный массив в порядке убывания - C ++ 11 - PullRequest
0 голосов
/ 23 сентября 2019

Существуют ресурсы для сортировки массива в порядке убывания:

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

Как отсортировать массив C ++ в режимах ASC и DESC?

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

, но никто не решает вопрос о том, как это сделать для типа std::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 array из int в порядке убывания?

1 Ответ

6 голосов
/ 23 сентября 2019

В отличие от необработанных массивов, std::array не будет неявно преобразовываться в указатель (даже если вы можете получить указатель явно из std::array::data), вы должны использовать begin()и end(), которые обычно используются для получения итераторов из контейнеров STL.например,

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

или

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

PS: последний работает и с необработанными массивами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...