Namespaces
Variants
Actions

std::ranges::sort_heap

From cppreference.com
< cpp‎ | algorithm‎ | ranges
 
 
Algorithm library
Constrained algorithms and algorithms on ranges(C++20)
Constrained algorithms, e.g. ranges::copy, ranges::sort, ...
Execution policies (C++17)
Sorting and related operations
Partitioning operations
Sorting operations
Binary search operations
(on partitioned ranges)
Set operations (on sorted ranges)
Merge operations (on sorted ranges)
Heap operations
Minimum/maximum operations
(C++11)
(C++17)
Lexicographical comparison operations
Permutation operations
C library
Numeric operations
Operations on uninitialized memory
 
Constrained algorithms
All names in this menu belong to namespace std::ranges
Non-modifying sequence operations
Modifying sequence operations
Partitioning operations
Sorting operations
Binary search operations (on sorted ranges)
       
       
Set operations (on sorted ranges)
Heap operations
         
sort_heap
Minimum/maximum operations
Permutation operations
Fold operations
Operations on uninitialized storage
Return types
 
Defined in header <algorithm>
Call signature
template<std::random_access_iterator I, std::sentinel_for<I> S,

          class Comp =ranges::less, class Proj =std::identity>
    requires std::sortable<I, Comp, Proj>

constexpr I sort_heap( I first, S last, Comp comp ={}, Proj proj ={});
(1) (since C++20)
template<ranges::random_access_range R,

          class Comp =ranges::less, class Proj =std::identity>
    requires std::sortable<ranges::iterator_t<R>, Comp, Proj>
constexprranges::borrowed_iterator_t<R>

    sort_heap( R&& r, Comp comp ={}, Proj proj ={});
(2) (since C++20)

Sorts the elements in the specified range with respect to comp and proj, where the range originally represents a heap with respect to comp and proj. The sorted range no longer maintains the heap property.

1) The specified range is [firstlast).
2) The specified range is r.

If the specified range is not a heap with respect to comp and proj, the behavior is undefined.

The function-like entities described on this page are algorithm function objects (informally known as niebloids), that is:

Contents

[edit]Parameters

first, last - the iterator-sentinel pair defining the range of elements to modify
r - the range of elements to modify
comp - comparator to apply to the projected elements
proj - projection to apply to the elements

[edit]Return value

1)last

[edit]Complexity

At most 2N⋅log(N) applications of comp and 4N⋅log(N) applications of proj, where N is:

1)ranges::distance(first, last)

[edit]Possible implementation

struct sort_heap_fn {template<std::random_access_iterator I, std::sentinel_for<I> S, class Comp =ranges::less, class Proj =std::identity> requires std::sortable<I, Comp, Proj>constexpr I operator()(I first, S last, Comp comp ={}, Proj proj ={})const{auto ret{ranges::next(first, last)};for(auto last{ret}; first != last;--last)ranges::pop_heap(first, last, comp, proj);return ret;}   template<ranges::random_access_range R, class Comp =ranges::less, class Proj =std::identity> requires std::sortable<ranges::iterator_t<R>, Comp, Proj>constexprranges::borrowed_iterator_t<R> operator()(R&& r, Comp comp ={}, Proj proj ={})const{return(*this)(ranges::begin(r), ranges::end(r), std::move(comp), std::move(proj));}};   inlineconstexpr sort_heap_fn sort_heap{};

[edit]Example

#include <algorithm>#include <array>#include <iostream>   void print(autoconst& rem, constauto& v){std::cout<< rem;for(constauto i : v)std::cout<< i <<' ';std::cout<<'\n';}   int main(){std::array v{3, 1, 4, 1, 5, 9}; print("original array: ", v);   std::ranges::make_heap(v); print("after make_heap: ", v);   std::ranges::sort_heap(v); print("after sort_heap: ", v);}

Output:

original array: 3 1 4 1 5 9 after make_heap: 9 5 4 1 1 3 after sort_heap: 1 1 3 4 5 9

[edit]See also

checks if the given range is a max heap
(algorithm function object)[edit]
finds the largest subrange that is a max heap
(algorithm function object)[edit]
creates a max heap out of a range of elements
(algorithm function object)[edit]
removes the largest element from a max heap
(algorithm function object)[edit]
adds an element to a max heap
(algorithm function object)[edit]
turns a max heap into a range of elements sorted in ascending order
(function template)[edit]
close