template<class BidirectionalRange> bool next_permutation(BidirectionalRange& rng); template<class BidirectionalRange> bool next_permutation(const BidirectionalRange& rng); template<class BidirectionalRange, class Compare> bool next_permutation(BidirectionalRange& rng, Compare pred); template<class BidirectionalRange, class Compare> bool next_permutation(const BidirectionalRange& rng, Compare pred);
next_permutation
transforms
the range of elements rng
into the lexicographically next greater permutation of the elements if
such a permutation exists. If one does not exist then the range is transformed
into the lexicographically smallest permutation and false
is returned. true
is returned
when the next greater permutation is successfully generated.
The ordering relationship is determined by using operator<
in the non-predicate versions, and
by evaluating pred
in
the predicate versions.
Defined in the header file boost/range/algorithm/permutation.hpp
For the non-predicate versions:
BidirectionalRange
is a model of the Bidirectional
Range Concept.
BidirectionalRange
is mutable.
BidirectionalRange
's
value type is a model of the LessThanComparableConcept
.
BidirectionalRange
's
value type is a strict weak ordering,
as defined in the LessThanComparableConcept
requirements.
For the predicate versions:
BidirectionalRange
is a model of the Bidirectional
Range Concept.
BidirectionalRange
is mutable.
Compare
is a model
of the StrictWeakOrderingConcept
.
BidirectionalRange
's
value type is convertible to both of Compare
's
argument types.
Linear. At most distance(rng) / 2
swaps.