Пространства имён
Варианты
Действия

next_permutation

Материал из cppreference.com

Синтаксис:

    #include <algorithm>
    bool next_permutation( bidirectional_iterator start, bidirectional_iterator end );
    bool next_permutation( bidirectional_iterator start, bidirectional_iterator end, StrictWeakOrdering cmp );

Производит перестановку элементов диапазона

Переставляет элементы диапазона [first, last), в результате чего получается следующая, бОльшая перестановка. Сравнение отдельных элементов происходит: в первом варианте с помощью оператора <, а во втором варианте с помощью оператора comp.

Перестановка - это любой вариант из N! возможных вариантов расположения элементов в диапазоне относительно друг друга. Различные перестановки могут быть упорядочены по возрастанию их относительного лексикографического сравнения между собой; Первая перестановка в таком отсортированном списке (та, которая является лексикографически наименьшей из всех перестановок) будет та, при которой все элементы диапазона упорядочены по возрастанию. Наибольшая перестановка будет та, в которой все элементы упорядочены по убыванию.

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

Параметры

first, last Двунаправленные итераторы на начальную и конечную позиции последовательности. Они определяют диапазон [first,last), который содержит все элементы между first и last, включая элемент, обозначенный указателем first, но не включая элемент, обозначенный указателем last.

comp

Объект-функция сравнения, которая берет два значения одинакового типа, содержащиеся в диапазоне, и, сравнивая их, возвращает истину, если первый аргумент меньше чем второй.

Возвращаемое значение

Истина, если функция может переставить элементы диапазона в лексикографически бОльшую перестановку. Иначе функция возвращает ложь, чтобы показать, что перестановка не больше предыдущей и является наименьшей возможной (отсортированной по возрастанию).

Пример

// next_permutation
#include <iostream>
#include <algorithm>
using namespace std;
 
int main () {
  int myints[] = {1,2,3};
 
  cout << "The 3! possible permutations with 3 elements:\n";
 
  sort (myints,myints+3);
 
  do {
    cout << myints[0] << " " << myints[1] << " " << myints[2] << endl;
  } while ( next_permutation (myints,myints+3) );
 
  return 0;
}

Вывод:

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1


Смотрите также: prev_permutation, random_sample, random_sample_n, random_shuffle