Сортировка вектора в C++
Введение
В этом уроке мы сосредоточимся на сортировке вектора в C++.
Сортировка — одна из широко выполняемых операций в любом языке программирования. Точно так же и в C++ есть несколько алгоритмов, следуя которым мы можем сортировать любую структуру данных.
В частности, для векторов мы можем выполнять операции сортировки в любом порядке (по возрастанию или по убыванию).
Сортировка вектора в С++ в порядке возрастания
Вектор в C++ можно легко отсортировать по возрастанию с помощью функции sort()
, определенной в заголовочном файле algorithm
.
Функция sort()
сортирует заданную структуру данных и ничего не возвращает. Сортировка происходит между двумя переданными итераторами или позициями. Третий параметр определяет порядок, в котором будут сравниваться элементы.
По умолчанию, если третий параметр не передается, функция считает его функцией std::less
. Эта функция возвращает true или false на основе сравнения двух аргументов, независимо от того, меньше ли первый, чем другой.
Итак, теперь давайте посмотрим, как мы можем отсортировать вектор в C++ (в порядке возрастания).
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
//vector initialisation
vector<int> vec {5, 4, 3, 2, 1};
cout<<"Before sorting vector : ";
for(auto i=vec.begin(); i<vec.end(); i++)
{
cout<<" "<<*i;
}
std::sort(vec.begin(),vec.end());//Sorting the vector
cout<<"\n\nAfter sorting vector : ";
for(auto i=vec.begin(); i<vec.end(); i++)
{
cout<<" "<<*i;
}
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<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
//vector initialisation
vector<int> vec { 2,4,6,8,10 };
cout<<"Before sorting vector : ";
for(auto i=vec.begin(); i<vec.end(); i++)
{
cout<<" "<<*i;
}
std::sort(vec.begin(),vec.end(), greater<int>());//Sorting the vector using greater<int>() function
cout<<"\n\nAfter sorting vector : ";
for(auto i=vec.begin(); i<vec.end(); i++)
{
cout<<" "<<*i;
}
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<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
//vector initialisation
vector<int> vec { 11,22,33,44,55 };
cout<<"Before sorting vector : ";
for(auto i=vec.begin(); i<vec.end(); i++)
{
cout<<" "<<*i;
}
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<<"\n\nAfter sorting vector : ";
for(auto i=vec.begin(); i<vec.end(); i++)
{
cout<<" "<<*i;
}
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.