Difference between revisions of "cpp/algorithm/is heap"
m (Text replace - "RandomAccessIterator" to "RandomIt") |
(+type reqs) |
||
Line 21: | Line 21: | ||
{{param list item | first, last | the range of elements to examine}} | {{param list item | first, last | the range of elements to examine}} | ||
{{param list cmp | comp | p1=RandomIt}} | {{param list cmp | comp | p1=RandomIt}} | ||
+ | {{param list hreq}} | ||
+ | {{param list req concept | RandomIt | RandomAccessIterator}} | ||
{{param list end}} | {{param list end}} | ||
Line 27: | Line 29: | ||
===Complexity=== | ===Complexity=== | ||
− | + | Linear in the distance between {{tt|first}} and {{tt|last}} | |
− | + | ||
===Notes=== | ===Notes=== |
Revision as of 06:42, 3 August 2012
Template:ddcl list begin <tr class="t-dsc-header">
<td><algorithm>
<td></td> <td></td> </tr> <tr class="t-dcl ">
<td >bool is_heap( RandomIt first, RandomIt last );
<td > (1) </td> <td class="t-dcl-nopad"> </td> </tr> <tr class="t-dcl ">
<td >bool is_heap( RandomIt first, RandomIt last, Compare comp );
<td > (2) </td> <td class="t-dcl-nopad"> </td> </tr> Template:ddcl list end
Checks if the elements in range [first, last)
are a heap.
The first version of is_heap
uses operator< to compare elements, whereas the second uses the given comparison function comp
.
Contents |
Parameters
first, last | - | the range of elements to examine |
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.
|
Return value
true if the range is heap, false otherwise.
Complexity
Linear in the distance between first
and last
Notes
A heap with respect to comp (max heap) is a random access range [
first,
last)
that has the following properties:
- Given N as last - first, for all integer i where 0 < i < N, bool(comp(first[(i - 1) / 2], first[i])) is false.
- A new element can be added using std::push_heap, in 𝓞(log N) time.
- *first can be removed using std::pop_heap, in 𝓞(log N) time.
Example
#include <iostream> #include <algorithm> 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