Одной из важнейших задач в программировании является сортировка данных. В стандартной библиотеке C++ (STL) для этого предназначен алгоритм std::sort, находящийся в заголовочном файле <algorithm>. Это универсальный, высокоэффективный инструмент, который подходит для большинства задач сортировки в современных C++ проектах.
Общий синтаксис
#include <algorithm> #include <vector> std::sort(begin, end); // Сортировка по умолчанию (по возрастанию) std::sort(begin, end, compare_function); // Сортировка с использованием компаратора
begin и end — итераторы начала и конца диапазона (например, v.begin() и v.end()).
compare_function — функция или лямбда, определяющая порядок элементов.
std::sort основан на гибриде алгоритмов, таких как QuickSort, HeapSort и InsertionSort. Он оптимизирован под большинство сценариев и обычно работает за O(n log n) времени.
Примеры использования
Сортировка чисел по возрастанию
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> numbers = {5, 3, 8, 1, 4};
std::sort(numbers.begin(), numbers.end());
for (int num : numbers)
std::cout << num << " "; // Результат: 1 3 4 5 8
}
Сортировка по убыванию
std::sort(numbers.begin(), numbers.end(), std::greater<int>());
// Или с лямбдой:
std::sort(numbers.begin(), numbers.end(), [](int a, int b) {
return a > b;
});
Сортировка пользовательских структур
struct Person {
std::string name;
int age;
};
std::vector<Person> people = {
{"Alice", 30},
{"Bob", 25},
{"Charlie", 35}
};
std::sort(people.begin(), people.end(), [](const Person& a, const Person& b) {
return a.age < b.age;
});
Важные замечания
std::sortтребует RandomAccessIterator — то есть он работает сstd::vector,std::array,C-массивами, но не работает сstd::list.- Если вам нужен стабильный порядок (при равных элементах сохраняется исходный порядок), используйте
std::stable_sort. - Можно использовать
std::sortи с указателями на массивы:
int arr[] = {3, 1, 4};
std::sort(arr, arr + 3);
Советы по производительности
- Используйте
reserve()илиresize()заранее для векторов, чтобы избежать перераспределения памяти. - Не забывайте про
std::moveв случае сортировки объектов, поддерживающих перемещение — это ускорит выполнение. - Для больших данных, требующих стабильности сортировки,
std::stable_sortможет быть более подходящим, несмотря на чуть большую нагрузку по памяти.
std::sort — это мощный и удобный инструмент для быстрой сортировки любых данных в C++. Его гибкость, высокая производительность и простота использования делают его предпочтительным выбором в большинстве случаев. Используйте std::sort вместе с лямбда-функциями и собственными компараторами для адаптации под любые задачи.
