Поиск по сайту:

Сортировка вектора в 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.