Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

prev_permutation
PrevUpHomeNext
Prototype

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);

Description

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.

Definition

Defined in the header file boost/range/algorithm/permutation.hpp

Requirements

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.
  • The ordering of objects of type 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.
Complexity

Linear. At most distance(rng) / 2 swaps.


PrevUpHomeNext