template<class BidirectionalIterator>
bool next_permutation(BidirectionalIterator first,
BidirectionalIterator last);
template<class BidirectionalIterator, class Compare>
bool next_permutation(BidirectionalIterator first,
BidirectionalIterator last, Compare comp);
Effects:
Takes a sequence defined by the range
[first, last)
and transforms it into the next permutation
. The next permutation is found by assuming that the set of all permutations is
lexicographically sorted with respect to
operator<
or
comp.Returns:
true
if such a permutation exists
. Otherwise, it transforms the sequence into the smallest permutation,
that is, the ascendingly sorted one, and returns
false.Complexity:
At most
(last - first) / 2
swaps
. template<class BidirectionalIterator>
bool prev_permutation(BidirectionalIterator first,
BidirectionalIterator last);
template<class BidirectionalIterator, class Compare>
bool prev_permutation(BidirectionalIterator first,
BidirectionalIterator last, Compare comp);
Effects:
Takes a sequence defined by the range
[first, last)
and transforms it into the previous permutation
. The previous permutation is found by assuming that the set of all permutations is
lexicographically sorted with respect to
operator<
or
comp.Returns:
true
if such a permutation exists
. Otherwise, it transforms the sequence into the largest permutation,
that is, the descendingly sorted one, and returns
false.Complexity:
At most
(last - first) / 2
swaps
.