std::next_permutation
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке.) |
<metanoindex/>
<tbody> </tbody>| Определено в заголовочном файле <algorithm>
|
||
template< class BidirIt > bool next_permutation( BidirIt first, BidirIt last ); |
(1) | |
template< class BidirIt, class Compare > bool next_permutation( BidirIt first, BidirIt last, Compare comp ); |
(2) | |
[first, last) в следующем перестановку из множества всех перестановок, которые лексикографически упорядочены по operator< или comp. Возврат true если такие перестановки существует, иначе превращает диапазон в первую перестановку (как бы std::sort(first, last)) и возвращается false.[first, last) into the next permutation from the set of all permutations that are lexicographically ordered with respect to operator< or comp. Returns true if such permutation exists, otherwise transforms the range into the first permutation (as if by std::sort(first, last)) and returns false.Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Параметры
| first, last | — | диапазон элементов переставлять
Оригинал: the range of elements to permute Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
| comp | — | объект функции сравнения (т.е. объект, удовлетворяющий требованиям Compare), который возвращает true, если первый аргумент "меньше", чем второй.Определение сравнения должно быть эквивалентно:
Использование |
| Требования к типам | ||
-BidirIt должен соответствовать требованиям ValueSwappable и BidirectionalIterator.
| ||
Возвращаемое значение
true если новые перестановки лексикографически больше, чем старые. false если последняя перестановка была достигнута, и диапазон был сброшен в первую перестановку.true if the new permutation is lexicographically greater than the old. false if the last permutation was reached and the range was reset to the first permutation.Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Сложность
N = std::distance(first, last).N = std::distance(first, last).Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Возможная реализация
template<class BidirIt>
bool next_permutation(BidirIt first, BidirIt last)
{
if (first == last) return false;
BidirIt i = last;
if (first == --i) return false;
while (1) {
BidirIt i1, i2;
i1 = i;
if (*--i < *i1) {
i2 = last;
while (!(*i < *--i2))
;
std::iter_swap(i, i2);
std::reverse(i1, last);
return true;
}
if (i == first) {
std::reverse(first, last);
return false;
}
}
}
|
Пример
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
#include <algorithm>
#include <string>
#include <iostream>
int main()
{
std::string s = "aba";
std::sort(s.begin(), s.end());
do {
std::cout << s << '\n';
} while(std::next_permutation(s.begin(), s.end()));
}
Вывод:
aab
aba
baa
См. также
(C++11) |
определяет, является ли последовательность перестановкой другой последовательности (шаблон функции) |
| генерирует следующую меньшую лексикографическую перестановку диапазона элементов (шаблон функции) |