[section:sort_heap sort_heap]

[heading Prototype]

``
template<class RandomAccessRange>
RandomAccessRange& sort_heap(RandomAccessRange& rng);

template<class RandomAccessRange>
const RandomAccessRange& sort_heap(const RandomAccessRange& rng);

template<class RandomAccessRange, class Compare>
RandomAccessRange& sort_heap(RandomAccessRange& rng, Compare pred);

template<class RandomAccessRange, class Compare>
const RandomAccessRange& sort_heap(const RandomAccessRange& rng, Compare pred);
``

[heading Description]

`sort_heap` turns a heap into a sorted range.

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/heap_algorithm.hpp`

[heading Requirements]

[*For the non-predicate versions:]

* `RandomAccessRange` is a model of the __random_access_range__ Concept.
* `RandomAccessRange` is mutable.
* `RandomAccessRange`'s value type is a model of the `LessThanComparableConcept`.
* The ordering of objects of type `RandomAccessRange`'s value type is a [*/strict weak ordering/], as defined in the `LessThanComparableConcept` requirements.

[*For the predicate versions:]

* `RandomAccessRange` is a model of the __random_access_range__ Concept.
* `RandomAccessRange` is mutable.
* `Compare` is a model of the `StrictWeakOrderingConcept`.
* `RandomAccessRange`'s value type is convertible to both of `Compare`'s argument types.

[heading Precondition:]

`rng` is a heap.

[heading Complexity]

At most `N * log(N)` comparisons, where `N` is `distance(rng)`.

[endsect]


