std::sort_heap() algorithm
- od C++20
- do C++20
template< class RandomIt >
constexpr void sort_heap( RandomIt first, RandomIt last );
// (2)
template< class RandomIt, class Compare >
constexpr void sort_heap( RandomIt first, RandomIt last, Compare comp );
template< class RandomIt >
void sort_heap( RandomIt first, RandomIt last );
// (2)
template< class RandomIt, class Compare >
void sort_heap( RandomIt first, RandomIt last, Compare comp );
Converts the max heap [first
; last
) into a sorted range in ascending order.
The resulting range no longer has the heap property.
-
(1) Elements are compared using
operator<
. -
(2) Elements are compared using the given binary comparison function
comp
.
Parameters
first last | The range of elements to sort. |
policy | The execution policy to use. See execution policy for details. |
comp | Comparison function object (i.e. an object that satisfies the requirements of Compare). The signature of the comparison function should be equivalent to the following:
|
Type requirements
RandomIt | LegacyRandomAccessIterator LegacyRandomAccessIterator |
The type defereferenced RandomIt | MoveAssignable MoveConstructible |
Return value
(none)
Complexity
Given N
as std::distance(first, last)
:
At most 2 * N * log(N) comparisons.
Exceptions
The overloads with a template parameter named ExecutionPolicy
report errors as follows:
- If execution of a function invoked as part of the algorithm throws an exception and
ExecutionPolicy
is one of the standard policies,std::terminate
is called. For any otherExecutionPolicy
, the behavior is implementation-defined. - If the algorithm fails to allocate memory,
std::bad_alloc
is thrown.
Possible implementation
sort_heap(1)
sort_heap(2)
Notes
A max heap is a range of elements [f
; l
) that has the following properties:
- Given
N
asl - f
, for all0 < i < N
,f[(i - 1) / 2]
does not compare less thanf[i]
. - A new element can be added using
std::push_heap
, in O(log(N)) time. - The first element can be removed using
std::pop_heap
, in O(log(N)) time.
Examples
Main.cpp
#include <algorithm>
#include <iostream>
#include <string_view>
#include <vector>
void println(std::string_view fmt, auto const& v)
{
for (std::cout << fmt; const auto &i : v)
std::cout << i << ' ';
std::cout << '\n';
}
int main()
{
std::vector<int> v {3, 1, 4, 1, 5, 9};
std::sort_heap(v.begin(), v.end());
println("after sort_heap, v: ", v);
std::sort_heap(v.begin(), v.end());
println("after sort_heap, v: ", v);
}
Output
after sort_heap, v: 9 4 5 1 1 3
after sort_heap, v: 1 1 3 4 5 9
This article originates from this CppReference page. It was likely altered for improvements or editors' preference. Click "Edit this page" to see all changes made to this document.
Hover to see the original license.
Hover to see the original license.