cpp

Сортировка элементов

Для сортировки элементов предназначены следующие функции:

  • sort() — сортирует элементы внутри указанного диапазона:
// #include <algorithm>
std::vector<int> arr = {4, 5, 3, 2, 6, 1};
std::sort(arr.begin(), arr.end());
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 1 2 3 4 5 6

По умолчанию сравнение производится с помощью оператора <. В третьем параметре можно указать пользовательскую функцию сравнения. Выполним сортировку в обратном порядке:

std::vector<int> arr = {4, 5, 3, 2, 6, 1};
std::sort(arr.begin(), arr.end(),
          [](const int &a, const int &b){ return a > b; });
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 6 5 4 3 2 1
  • stable_sort() — сортирует элементы внутри указанного диапазона, при этом сохраняя порядок следования элементов с одинаковыми значениями:
// #include <algorithm>
std::vector<int> arr = {4, 5, 3, 2, 6, 1};
std::stable_sort(arr.begin(), arr.end());
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 1 2 3 4 5 6

По умолчанию сравнение производится с помощью оператора <. В третьем параметре можно указать пользовательскую функцию сравнения. Выполним сортировку в обратном порядке:

std::vector<int> arr = {4, 5, 3, 2, 6, 1};
std::stable_sort(arr.begin(), arr.end(),
            [](const int &a, const int &b){ return a > b; });
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 6 5 4 3 2 1
  • is_sorted() — возвращает значение true, если диапазон отсортирован, и false — в противном случае. По умолчанию сравнение производится с помощью оператора <. В последнем параметре можно указать пользовательскую функцию сравнения. Формат функции:
#include <algorithm>
bool is_sorted(first, last[, comp]);

Пример:

std::vector<int> arr = {4, 5, 3, 2, 6, 1, 8, 7};
std::cout << std::boolalpha;
std::cout << std::is_sorted(arr.begin(), arr.end())
          << std::endl; // false
std::sort(arr.begin(), arr.end());
std::cout << std::is_sorted(arr.begin(), arr.end())
          << std::endl; // true
  • is_sorted_until() — возвращает итератор на первый элемент из диапазона между first и last, который не следует в порядке возрастания. Если диапазон отсортирован, то функция возвращает итератор last. По умолчанию сравнение производится с помощью оператора <. В последнем параметре можно указать пользовательскую функцию сравнения. Формат функции:
#include <algorithm>
iterator is_sorted_until(first, last[, comp]);

Пример:

std::vector<int> arr = {1, 2, 3, 5, 4, 6, 8, 7};
auto it = std::is_sorted_until(arr.begin(), arr.end());
if (it != arr.end()) {
   std::cout << *it << std::endl;    // 4
}
std::sort(arr.begin(), arr.end());
it = std::is_sorted_until(arr.begin(), arr.end());
if (it == arr.end()) {
   std::cout << "sort" << std::endl; // sort
}
  • partial_sort() — выполняет частичную сортировку элементов из диапазона между позициями, заданными с помощью итераторов first и last. Элементы от начальной позиции и до позиции middle будут следовать в порядке возрастания значений из диапазона, а оставшиеся элементы — в произвольном порядке. Формат функции:
#include <algorithm>
void partial_sort(first, middle, last[, comp]);

Пример:

std::vector<int> arr = {4, 5, 3, 2, 6, 1, 8, 7};
std::partial_sort(arr.begin(), arr.begin() + 4, arr.end());
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 1 2 3 4 6 5 8 7

По умолчанию сравнение производится с помощью оператора <. В последнем параметре можно указать пользовательскую функцию сравнения. Выполним частичную сортировку в обратном порядке:

std::vector<int> arr = {4, 5, 3, 2, 6, 1, 8, 7};
std::partial_sort(arr.begin(), arr.begin() + 4, arr.end(),
             [](const int &a, const int &b){ return a > b; });
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 8 7 6 5 2 1 3 4
  • partial_sort_copy() — выполняет частичную сортировку элементов из диапазона между first и last, при этом не изменяя порядок следования в исходном контейнере. Отсортированные копии элементов записывается в диапазон между позициями, заданными с помощью итераторов result_first и result_last. Формат функции:
#include <algorithm>
iterator partial_sort_copy(first, last,
                           result_first, result_last[, comp]);

Пример:

std::vector<int> arr = {4, 5, 3, 2, 6, 1, 8, 7}, arr2(4, 0);
std::partial_sort_copy(arr.begin(), arr.end(),
                       arr2.begin(), arr2.end());
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 4 5 3 2 6 1 8 7
for (int &el : arr2) std::cout << el << ' ';
std::cout << std::endl; // 1 2 3 4

По умолчанию сравнение производится с помощью оператора <. В последнем параметре можно указать пользовательскую функцию сравнения. Выполним частичную сортировку в обратном порядке:

std::vector<int> arr = {4, 5, 3, 2, 6, 1, 8, 7}, arr2(4, 0);
std::partial_sort_copy(arr.begin(), arr.end(),
             arr2.begin(), arr2.end(),
             [](const int &a, const int &b){ return a > b; });
for (int &el : arr2) std::cout << el << ' ';
std::cout << std::endl; // 8 7 6 5

Учебник C++ (Qt Creator и MinGW)
Учебник C++ (Qt Creator и MinGW) в формате PDF

Реквизиты

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp