Как отсортировать вектор x по убыванию
Перейти к содержимому

Как отсортировать вектор x по убыванию

  • автор:

Сортировка вектора в C++

В этом уроке мы сосредоточимся на сортировке вектора в C++.

Сортировка — одна из широко выполняемых операций в любом языке программирования. Точно так же и в C++ есть несколько алгоритмов, следуя которым мы можем сортировать любую структуру данных.

В частности, для векторов мы можем выполнять операции сортировки в любом порядке (по возрастанию или по убыванию).

Сортировка вектора в С++ в порядке возрастания

Вектор в C++ можно легко отсортировать по возрастанию с помощью функции sort() , определенной в заголовочном файле algorithm .

Функция sort() сортирует заданную структуру данных и ничего не возвращает. Сортировка происходит между двумя переданными итераторами или позициями. Третий параметр определяет порядок, в котором будут сравниваться элементы.

По умолчанию, если третий параметр не передается, функция считает его функцией std::less () . Эта функция возвращает true или false на основе сравнения двух аргументов, независимо от того, меньше ли первый, чем другой.

Итак, теперь давайте посмотрим, как мы можем отсортировать вектор в C++ (в порядке возрастания).

#include #include #include using namespace std; int main() < //vector initialisation vectorvec ; cout std::sort(vec.begin(),vec.end());//Sorting the vector cout return 0; > 
Before sorting vector : 5 4 3 2 1 After sorting vector : 1 2 3 4 5 

Сортировка вектора в C++ по убыванию

Как мы уже говорили ранее, третий аргумент функции sort() в C++ определяет порядок сортировки. Таким образом, мы можем определить в нем функции для сортировки любого вектора в желаемом порядке (в данном случае по убыванию).

1. Использование Greater () в sort()

Подобно функции less () , функция greater () возвращает логическое значение как истинное или ложное, но в противоположном смысле. Если первый аргумент больше второго, функция возвращает истину и ложь, если вышеуказанное условие ложно.

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

#include #include #include using namespace std; int main() < //vector initialisation vectorvec < 2,4,6,8,10 >; cout std::sort(vec.begin(),vec.end(), greater());//Sorting the vector using greater() function cout return 0; > 
Before sorting vector : 2 4 6 8 10 After sorting vector : 10 8 6 4 2 

2. Использование лямбда-выражения в sort()

Начиная с C++11, использование лямбда-выражений было введено в программирование на C++. Это не что иное, как простые однострочные функции, не требующие объявления или даже указания типа возвращаемого значения.

Следовательно, мы можем использовать наше собственное определенное лямбда-выражение, чтобы определить порядок сортировки с помощью функции sort() . Это можно сделать, определив однострочное выражение в качестве третьего параметра функции sort() . Давайте посмотрим, как

#include #include #include using namespace std; int main() < //vector initialisation vectorvec < 11,22,33,44,55 >; cout std::sort(vec.begin(),vec.end(), [](int &a, int &b)< return a>b; >); //Sorting the vector using user-defined lambda expression(return type bool) cout return 0; > 
Before sorting vector : 11 22 33 44 55 After sorting vector : 55 44 33 22 11 

Здесь выражение a>b используется для сравнения двух переданных аргументов из вектора. Как видно из вывода приведенного выше кода, вектор сортируется в порядке убывания по желанию.

Заключение

Итак, в этой статье мы узнали о сортировке векторов в C++ как по возрастанию, так и по убыванию. По любым дополнительным вопросам, связанным с этой темой, не стесняйтесь использовать комментарии ниже.

Рекомендации

  • Сортировка в STL — Учебное пособие по JournalDev,
  • — библиотека алгоритмов C++,
  • Как сортировать вектор STL? — Вопрос StackOverflow,
  • Сортировка вектора по убыванию — вопрос StackOverflow.

Как отсортировать vector>> по second.second (третий int)?

Это ссылка на функцию вида bool foo(const T& a, const T& b) , где T — тип элементов сортируемого вектора.

Задача этой функции — проверить, упорядочены ли a и b по возрастанию. Иными словами, не превышает ли значение a таковое у b (говоря математическим языком — соблюдается ли условие a < b ).

Отслеживать
ответ дан 15 сен 2016 в 16:56
Arhadthedev Arhadthedev
11.5k 8 8 золотых знаков 42 42 серебряных знака 70 70 бронзовых знаков

Не обязательно функцию, вполне можно функтор (например, лямбду). И сигнатура должна быть bool (const T& a, const T& b) вроде бы.

15 сен 2016 в 17:14

Типы аргументов исправил (за замечание спасибо), однако стоит ли нагружать новичка такими понятиями, как «функтор» и «лямбда-функция» (последнее, к тому же, отсутствует в стандартах 98-го и 2003-го годов)?

15 сен 2016 в 17:24

Ну, хотя бы показать возможность написать лямбду в качестве продвинутого использования? Я бы вообще написал «любая фигня, которую можно вызвать так: const T& l; const T& r; bool v = fignya(l, r); ». Хотя это, наверное, чересчур. (Но в духе C++.)

15 сен 2016 в 17:31
А кто бы мне объяснил, как такой тип возможен — vector ?@Harry, тут какая-то опечатка. Ну не может vector принимать вторым шаблонным аргументом пару, только класс управления памятью для элементов. Вероятно, имелось в виду всё же vector > > .

15 сен 2016 в 17:52

В предположении, что вас интересует vector>> , cmp может выглядеть примерно так, например:

bool cmp(const pair>& p1, const pair>& p2)

Отслеживать
ответ дан 15 сен 2016 в 17:56
220k 15 15 золотых знаков 120 120 серебряных знаков 231 231 бронзовый знак

cmp это любой функциональный объект. Это может быть лямбда, указатель на функцию или объект класса у которого определен operator() . Этот функциональный объект должен принимать два объекта из сортируемого списка, и возвращать bool . Объект должен реализовывать операцию строгого слабого упорядочения. Вот так это будет выглядеть на вашем примере:

#include #include #include typedef std::pair> IntIntInt; struct Compare < inline bool operator()(const IntIntInt &x, const IntIntInt &y) const< return x.second.second < y.second.second; >>; int main() < std::vectorv; v.push_back(std::make_pair(5, std::make_pair(3, 4))); v.push_back(std::make_pair(1, std::make_pair(9, 0))); v.push_back(std::make_pair(8, std::make_pair(6, 7))); v.push_back(std::make_pair(4, std::make_pair(2, 3))); v.push_back(std::make_pair(3, std::make_pair(1, 2))); std::sort(v.begin(), v.end(), Compare()); > 

Не сочтите за рекламу. Есть один замечательный сайт на котором можно подсмотреть описание всех алгоритмов, их аргументы, гарантии исключений, сложность и примеры использования.

Сортировка вектора по убыванию

Author24 — интернет-сервис помощи студентам

Сортировка вектора по полю(Сортировка вставками)
Здравствуйте! Нужно написать сортировку вектора по полю weight класса tomato. Вот класс: #pragma.

Установить упорядочены ли компоненты вектора а по возрастанию или убыванию.
1.Установить упорядочены ли компоненты вектора а по возрастанию или убыванию. 2.Установить имеются.

Отсортировать по убыванию только элементы вектора, расположенные на чётных позициях
1ая. Помогите решить. с++ не изучал, поступил на заочку, дали задание 2 дня на все это сессия.

Упорядочить по убыванию элементы вектора Z, полученные из элементов исходного вектора
Упорядочить по убыванию элементы вектора Z полученные из элементов вектора y.

Регистрация: 23.11.2015
Сообщений: 10

Лучший ответ

Сообщение было отмечено АРТЕ как решение

Решение

std::sort( a.begin(), a.end(), std::greaterint>() );

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Сортировка массива: числа по убыванию с начала, буквы по убыванию в конце
Вывести на экран заданный массив (8,v,q,2,с,7,а,9) элементов отсортировав его таким образом: числа.

Выделение столбцов из матрицы, сортировка полученного вектора, перестановка элементов вектора
Здравствуйте!Нужна помощь в пояснении. Дано задание в файле.По раздельности я примерно понимаю как.

Сортировка массива целых чисел A(n) по убыванию(используя метод обменная сортировка)
Помогите написать программу для сортировки массива целых чисел A(n) по убыванию(используя метод.

Упорядочены ли координаты вектора по убыванию.
Дан вектор х=(х1, х2, . хn). Написать программу, которая проверяет, упорядочены ли его координаты.

Или воспользуйтесь поиском по форуму:

Форумы GIS-Lab.info

Возникла задача создать вектор с каким-либо непрерывным распределением (логарифмическое, или номальное), а затем от начала к концу вектора отсортировать значения сначала по возрастанию, а затем по убыванию. Т.е. самые высокие значения должны находиться в середине вектора, а самые низкие — по краям. Помогите пожалуйста найти способ.

Posts: 4038 Joined: 15 Oct 2010, 08:33
Ваше звание: программист Location: Казань

Re: Сортировка данных по возрастанию и убыванию

Post by gamm » 18 May 2013, 18:16

ymr3R9Jge wrote: Возникла задача создать вектор с каким-либо непрерывным распределением (логарифмическое, или номальное), а затем от начала к концу вектора отсортировать значения сначала по возрастанию, а затем по убыванию. Т.е. самые высокие значения должны находиться в середине вектора, а самые низкие — по краям. Помогите пожалуйста найти способ.

так отсортировать невозможно. Но есть ощущение, что вам просто нужна функция плотности распределения, например

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *