[section:next_permutation next_permutation]

[heading 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);
``

[heading 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.

[heading Definition]

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

[heading 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.

[heading Complexity]

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

[endsect]


