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

next_permutation
PrevUpHomeNext
Prototype

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

Description

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.

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