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

Функция prev_permutation

Функция prev_permutation из заголовочного файла algorithm преобразует последовательность элементов в предыдущую перестановку в лексикографическом порядке. Если предыдущая перестановка существует, функция возвращает true, в противном случае - false и преобразует последовательность в последнюю (максимальную) перестановку. В первый и второй параметры мы передаем итераторы начала и конца последовательности. Третий параметр необязательный - это функция сравнения, которая определяет порядок сортировки.

Последовательность должна быть отсортирована по возрастанию (или в соответствии с заданным компаратором), чтобы функция корректно выполнила свою работу.

Синтаксис

prev_permutation(first, last) prev_permutation(first, last, comp)

Пример

Давайте получим предыдущую перестановку для вектора {3, 2, 1}:

#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { vector<int> res = {3, 2, 1}; bool success = prev_permutation(res.begin(), res.end()); cout << boolalpha << success << endl; for (int n : res) { cout << n << " "; } cout << endl; return 0; }

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

true 3 1 2

Пример

Давайте получим предыдущую перестановку, когда она не существует - для вектора, который уже является минимальной перестановкой:

#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { vector<int> res = {1, 2, 3}; bool success = prev_permutation(res.begin(), res.end()); cout << boolalpha << success << endl; for (int n : res) { cout << n << " "; } cout << endl; return 0; }

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

false 3 2 1

Пример

Давайте переберём все перестановки вектора в обратном порядке, используя цикл:

#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { vector<int> res = {3, 2, 1}; do { for (int n : res) { cout << n << " "; } cout << endl; } while (prev_permutation(res.begin(), res.end())); return 0; }

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

3 2 1 3 1 2 2 3 1 2 1 3 1 3 2 1 2 3

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

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