РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
362 of 815 menu

Функция stable_sort

Функция stable_sort сортирует элементы диапазона в порядке возрастания, но в отличие от обычной sort сохраняет относительный порядок элементов, которые считаются равными. В первый параметр мы передаем итератор на начало диапазона, а во второй - итератор на конец диапазона. Третьим необязательным параметром можно передать функцию сравнения, которая задает критерий сортировки. Устойчивость особенно важна при сортировке составных объектов, когда нужно сохранить исходный порядок элементов с одинаковым ключом.

Функция доступна после подключения заголовочного файла <algorithm>.

Синтаксис

stable_sort(first, last) stable_sort(first, last, comp)

Пример

Давайте отсортируем вектор чисел по возрастанию:

#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> vec = {5, 2, 4, 1, 3}; stable_sort(vec.begin(), vec.end()); for (int num : vec) { cout << num << " "; } cout << endl; return 0; }

Результат выполнения кода:

1 2 3 4 5

Пример

Давайте отсортируем вектор чисел по убыванию, передав функцию сравнения:

#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> vec = {5, 2, 4, 1, 3}; stable_sort(vec.begin(), vec.end(), greater<int>()); for (int num : vec) { cout << num << " "; } cout << endl; return 0; }

Результат выполнения кода:

5 4 3 2 1

Пример

Давайте покажем главное отличие stable_sort от sort. Отсортируем вектор пар по первому элементу, где у нескольких пар первый элемент одинаков:

#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<pair<int, string>> vec = { {2, "abcde"}, {1, "12345"}, {2, "hello"}, {1, "world"} }; stable_sort(vec.begin(), vec.end(), [](const pair<int, string>& a, const pair<int, string>& b) { return a.first < b.first; }); for (const auto& p : vec) { cout << p.first << ":" << p.second << " "; } cout << endl; return 0; }

Результат выполнения кода:

"1:12345 1:world 2:abcde 2:hello"

Как видно, пары с одинаковым первым элементом сохранили свой исходный относительный порядок: "12345" осталась перед "world", а "abcde" - перед "hello".

Смотрите также

  • функция sort,
    которая сортирует диапазон без сохранения порядка
  • функция partial_sort,
    которая сортирует только часть диапазона
  • функция stable_partition,
    которая устойчиво разделяет элементы по условию
  • функция is_sorted,
    которая проверяет, отсортирован ли диапазон
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить