/C++

# std::is_heap

Defined in header `<algorithm>`
(1)
```template< class RandomIt >
bool is_heap( RandomIt first, RandomIt last );```
(since C++11)
(until C++20)
```template< class RandomIt >
constexpr bool is_heap( RandomIt first, RandomIt last );```
(since C++20)
```template< class ExecutionPolicy, class RandomIt >
bool is_heap( ExecutionPolicy&& policy, RandomIt first, RandomIt last );```
(2) (since C++17)
(3)
```template< class RandomIt, class Compare >
bool is_heap( RandomIt first, RandomIt last, Compare comp );```
(since C++11)
(until C++20)
```template< class RandomIt, class Compare >
constexpr bool is_heap( RandomIt first, RandomIt last, Compare comp );```
(since C++20)
```template< class ExecutionPolicy, class RandomIt, class Compare >
bool is_heap( ExecutionPolicy&& policy, RandomIt first, RandomIt last, Compare comp );```
(4) (since C++17)

Checks if the elements in range `[first, last)` are a max heap.

1) Elements are compared using `operator<`.
3) Elements are compared using the given binary comparison function `comp`.
2,4) Same as (1,3), but executed according to `policy`. These overloads do not participate in overload resolution unless `std::is_execution_policy_v<std::decay_t<ExecutionPolicy>>` is true

### Parameters

 first, last - the range of elements to examine 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) 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) `Type1` and `Type2` regardless of value category (thus, `Type1 &` is not allowed, nor is `Type1` unless for `Type1` a move is equivalent to a copy (since C++11)). The types `Type1` and `Type2` must be such that an object of type `RandomIt` can be dereferenced and then implicitly converted to both of them. ​ Type requirements -`RandomIt` must meet the requirements of LegacyRandomAccessIterator.

### Return value

`true` if the range is max heap, `false` otherwise.

### Complexity

Linear in the distance between `first` and `last`.

### 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 other `ExecutionPolicy`, the behavior is implementation-defined.
• If the algorithm fails to allocate memory, `std::bad_alloc` is thrown.

A max heap is a range of elements `[f,l)` that has the following properties:

• With `N = l - f`, for all `0 < i < N`, ```f[floor( i-1 2 )]``` does not compare less than `f[i]`.
• a new element can be added using `std::push_heap()`
• the first element can be removed using `std::pop_heap()`

### Example

```#include <iostream>
#include <algorithm>
#include <vector>

int main()
{
std::vector<int> v { 3, 1, 4, 1, 5, 9 };

std::cout << "initially, v: ";
for (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: ";
for (auto i : v) std::cout << i << ' ';
std::cout << '\n';
}```

Output:

```initially, v: 3 1 4 1 5 9
making heap...
after make_heap, v: 9 5 4 1 1 3```
{"ft_lang_label":"__label__en","ft_lang_prob":0.54206556,"math_prob":0.90716285,"size":2822,"snap":"2020-34-2020-40","text_gpt3_token_len":766,"char_repetition_ratio":0.15791342,"word_repetition_ratio":0.2255814,"special_character_ratio":0.29695252,"punctuation_ratio":0.22563177,"nsfw_num_words":0,"has_unicode_error":false,"math_prob_llama3":0.97184604,"pos_list":[0],"im_url_duplicate_count":[null],"WARC_HEADER":"{\"WARC-Type\":\"response\",\"WARC-Date\":\"2020-09-24T18:13:02Z\",\"WARC-Record-ID\":\"<urn:uuid:9074b9d1-8f8a-47ea-aec6-d3d91beb3856>\",\"Content-Length\":\"13469\",\"Content-Type\":\"application/http; msgtype=response\",\"WARC-Warcinfo-ID\":\"<urn:uuid:d77fc659-ee8e-4f64-b6f7-682cd08807b6>\",\"WARC-Concurrent-To\":\"<urn:uuid:2441ea59-22a8-40b8-b215-d9c6e29851d4>\",\"WARC-IP-Address\":\"104.27.139.129\",\"WARC-Target-URI\":\"https://docs.w3cub.com/cpp/algorithm/is_heap/\",\"WARC-Payload-Digest\":\"sha1:UJGQ4C723UU6SCAARJT7YVE3GRIZZWO2\",\"WARC-Block-Digest\":\"sha1:UVFVGMGPE5KN2NBVWEK7IWXN5W23PP4X\",\"WARC-Identified-Payload-Type\":\"text/html\",\"warc_filename\":\"/cc_download/warc_2020/CC-MAIN-2020-40/CC-MAIN-2020-40_segments_1600400219691.59_warc_CC-MAIN-20200924163714-20200924193714-00773.warc.gz\"}"}