next_permutation
Синтаксис:
#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