std::is_heap

Header: <algorithm>

Checks whether [first,last) is a heap.

# Declarations

template< class RandomIt >
bool is_heap( RandomIt first, RandomIt last );

(since C++11) (constexpr since C++20)

template< class ExecutionPolicy, class RandomIt >
bool is_heap( ExecutionPolicy&& policy,
RandomIt first, RandomIt last );

(since C++17)

template< class RandomIt, class Compare >
bool is_heap( RandomIt first, RandomIt last, Compare comp );

(since C++11) (constexpr since C++20)

template< class ExecutionPolicy, class RandomIt, class Compare >
bool is_heap( ExecutionPolicy&& policy,
RandomIt first, RandomIt last, Compare comp );

(since C++17)

# Parameters

# Return value

true if the range is a heap with respect to the corresponding comparator, false otherwise.

# Example

#include <algorithm>
#include <bit>
#include <iostream>
#include <vector>
 
int main()
{
    std::vector<int> v{3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9};
 
    std::cout << "initially, v:\n";
    for (const auto& i : v)
        std::cout << i << ' ';
    std::cout << '\n';
 
    if (!std::is_heap(v.begin(), v.end()))
    {
        std::cout << "making heap...\n";
        std::make_heap(v.begin(), v.end());
    }
 
    std::cout << "after make_heap, v:\n";
    for (auto t{1U}; const auto& i : v)
        std::cout << i << (std::has_single_bit(++t) ? " | " : " ");
    std::cout << '\n';
}

# See also