std:: sort_heap
| 
           Defined in header
            
            
             <algorithm>
            
            | ||
| 
           
           
           
            
             template
            
            
             <
            
            
             class
            
            RandomIt
            
             >
            
             void sort_heap ( RandomIt first, RandomIt last ) ; | (1) | (constexpr since C++20) | 
| 
           
           
           
            
             template
            
            
             <
            
            
             class
            
            RandomIt,
            
             class
            
            Compare
            
             >
            
             void sort_heap ( RandomIt first, RandomIt last, Compare comp ) ; | (2) | (constexpr since C++20) | 
       Converts the
       
        heap
       
       
        
         [
        
        
         
          first
         
        
        
         ,
        
        
         
          last
         
        
        
         )
        
       
       into a sorted range. The heap property is no longer maintained.
      
If any of the following conditions is satisfied, the behavior is undefined:
- 
        
         [first,last)is not a heap.
| 
 | (until C++11) | 
| 
 | (since C++11) | 
Parameters
| first, last | - | the heap to be sorted | 
| comp | - | comparison function object (i.e. an object that satisfies the requirements of
         
          
           Compare
          
         
         ) which returns
         
          
           
            true
           
          
         
         if the first argument is
         
          less
         
         than the second. The signature of the comparison function should be equivalent to the following: bool cmp ( const Type1 & a, const Type2 & b ) ; 
          While the signature does not need to have
          
           
            
             const
            
            
             &
            
           
          
          , the function must not modify the objects passed to it and must be able to accept all values of type (possibly const)
           | 
| Type requirements | ||
| - 
          RandomIt
         must meet the requirements of
         
          
           LegacyRandomAccessIterator
          
         
         . | ||
| - 
          Compare
         must meet the requirements of
         
          
           Compare
          
         
         . | ||
Complexity
Given N as std:: distance ( first, last ) :
Possible implementation
| sort_heap (1) | 
|---|
| template<class RandomIt> void sort_heap(RandomIt first, RandomIt last) { while (first != last) std::pop_heap(first, last--); } | 
| sort_heap (2) | 
| template<class RandomIt, class Compare> void sort_heap(RandomIt first, RandomIt last, Compare comp) { while (first != last) std::pop_heap(first, last--, comp); } | 
Example
#include <algorithm> #include <iostream> #include <string_view> #include <vector> void println(std::string_view fmt, const auto& 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::make_heap(v.begin(), v.end()); println("after make_heap, v: ", v); std::sort_heap(v.begin(), v.end()); println("after sort_heap, v: ", v); }
Output:
after make_heap, v: 9 4 5 1 1 3 after sort_heap, v: 1 1 3 4 5 9
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior | 
|---|---|---|---|
| LWG 2444 | C++98 | at most N⋅log(N) comparisons were allowed | increased to 2N⋅log(N) | 
See also
| 
           
            
             
              (C++11)
             
            
           
           | checks if the given range is a max heap (function template) | 
| 
           
            
             
              (C++11)
             
            
           
           | finds the largest subrange that is a max heap (function template) | 
| creates a max heap out of a range of elements (function template) | |
| removes the largest element from a max heap (function template) | |
| adds an element to a max heap (function template) | |
| 
           
            
             
              (C++20)
             
            
           
           | turns a max heap into a range of elements sorted in ascending order (algorithm function object) |