std::next_permutation
De cppreference.com
[] |
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
<metanoindex/>
<tbody> </tbody>| Dclar dans l'en-tte <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) | |
Transforme la gamme
[first, last) dans la prochaine permutation de l'ensemble de toutes les permutations qui sont lexicographiquement ordonnes par rapport operator< ou comp. true Retours s'il en existe permutation, autrement transforme la plage dans la premire permutation (comme par std::sort(first, last)) et retourne false .Original:
Transforms the range
[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.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Paramtres
| first, last | - | la plage d'lments permuter
Original: the range of elements to permute The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
| comp | - | comparison function which returns true if the first argument is less than the second. The signature of the comparison function should be equivalent to the following:
The signature does not need to have |
| Type requirements | ||
-BidirIt must meet the requirements of ValueSwappable and BidirectionalIterator.
| ||
Retourne la valeur
true si la nouvelle permutation est lexicographiquement suprieur l'ancien. false si la permutation dernier a t atteint et la gamme a t remis la premire permutation .Original:
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.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Complexit
la plupart des swaps N/2, o
N = std::distance(first, last) .Original:
At most N/2 swaps, where
N = std::distance(first, last).The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Mise en uvre possible
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;
}
}
}
|
Exemple
Le code suivant imprime tous les trois permutations de la chane "aba"
Original:
The following code prints all three permutations of the string "aba"
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
#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()));
}
Rsultat :
aab
aba
baa
Voir aussi
(C++11) |
determines if a sequence is a permutation of another sequence (fonction gnrique) |
lexicographique gnre le plus petit ct d'une permutation srie d'lments Original: generates the next smaller lexicographic permutation of a range of elements The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (fonction gnrique) | |