template<class BidirectionalRange> bool prev_permutation(BidirectionalRange& rng); template<class BidirectionalRange> bool prev_permutation(const BidirectionalRange& rng); template<class BidirectionalRange, class Compare> bool prev_permutation(BidirectionalRange& rng, Compare pred); template<class BidirectionalRange, class Compare> bool prev_permutation(const BidirectionalRange& rng, Compare pred);
prev_permutation
transforms
the range of elements rng
into the lexicographically next smaller permutation of the elements if
such a permutation exists. If one does not exist then the range is transformed
into the lexicographically largest permutation and false
is returned. true
is returned
when the next smaller 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.