C++算法is_heap()函数用于检查[first, last)范围内的元素是否构成堆。如果指定范围内的元素形成堆,则返回 true。
对于第一个版本使用运算符 < 比较元素,或者对于第二个版本使用给定的二进制比较函数 comp 比较元素。
用法
default (1) template <class RandomAccessIterator>
bool is_heap (RandomAccessIterator first, RandomAccessIterator last);
custom (2) template <class RandomAccessIterator, class Compare>
bool is_heap (RandomAccessIterator first, RandomAccessIterator last,
Compare comp);
参数
first:一个随机访问迭代器,指向一个范围的第一个元素来检查堆。
last:一个随机访问迭代器,指向范围中过去的最后一个元素以检查堆。
comp: 一个用户定义的二元谓词函数,它接受两个参数,如果两个参数按顺序返回真,否则返回假。它遵循严格的弱排序来对元素进行排序。
返回值
如果指定范围内的元素形成堆,则返回真,否则返回假。
复杂度
复杂度高达线性,比第一个和最后一个之间的距离小:比较元素对,直到发现不匹配。
数据竞争
访问范围 [first, last) 中的对象。
异常
如果元素比较或迭代器上的操作引发异常,则此函数将引发异常。
注意:无效的参数会导致未定义的行为。
例子1
让我们看一个简单的例子来演示 is_heap() 的使用:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v = {3, 1, 4};
cout << boolalpha;
cout << "before:is heap? "
<< is_heap(v.begin(), v.end()) << endl;
make_heap(v.begin(), v.end());
cout << " after:is heap? "
<< is_heap(v.begin(), v.end()) << endl;
return 0;
}
输出:
before:is heap? false after:is heap? true
例子2
让我们看另一个简单的例子:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<int> v { 2, 3, 4, 1, 5, 9 };
cout << "initially, v:";
for (auto i:v) cout << i << ' ';
cout << '\n';
if (!is_heap(v.begin(), v.end())) {
cout << "making heap...\n";
make_heap(v.begin(), v.end());
}
cout << "after make_heap, v:";
for (auto i:v) cout << i << ' ';
cout << '\n';
return 0;
}
输出:
initially, v:2 3 4 1 5 9 making heap... after make_heap, v:9 5 4 1 3 2
例子3
让我们看另一个简单的例子:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool ignore_case(char a, char b) {
return (tolower(a) == tolower(b));
}
int main(void) {
vector<char> v = {'E', 'd', 'C', 'b', 'A'};
bool result;
result = is_heap(v.begin(), v.end());
if (result == false)
cout << "Given sequence is not a max heap." << endl;
result = is_heap(v.begin(), v.end(), ignore_case);
if (result == true)
cout << "Given sequence is a max heap." << endl;
return 0;
}
输出:
Given sequence is not a max heap. Given sequence is a max heap.
示例 4
让我们看一个简单的例子:
#include <iostream> // std::cout
#include <algorithm> // std::is_heap, std::make_heap, std::pop_heap
#include <vector> // std::vector
using namespace std;
int main () {
vector<int> foo {9,5,2,6,4,1,3,8,7};
if (!is_heap(foo.begin(),foo.end()))
make_heap(foo.begin(),foo.end());
cout << "Popping out elements:";
while (!foo.empty()) {
pop_heap(foo.begin(),foo.end()); // moves largest element to back
cout << ' ' << foo.back(); // prints back
foo.pop_back(); // pops element out of container
}
cout << '\n';
return 0;
}
输出:
Popping out elements:9 8 7 6 5 4 3 2 1
相关用法
- C++ Algorithm is_heap_until()用法及代码示例
- C++ Algorithm is_sorted()用法及代码示例
- C++ Algorithm is_partitioned()用法及代码示例
- C++ Algorithm is_sorted_until()用法及代码示例
- C++ Algorithm inplace_merge()用法及代码示例
- C++ Algorithm iter_swap()用法及代码示例
- C++ Algorithm includes()用法及代码示例
- C++ Algorithm remove_if()用法及代码示例
- C++ Algorithm remove()用法及代码示例
- C++ Algorithm max_element()用法及代码示例
- C++ Algorithm set_union()用法及代码示例
- C++ Algorithm next_permutation()用法及代码示例
- C++ Algorithm upper_bound()用法及代码示例
- C++ Algorithm minmax()用法及代码示例
- C++ Algorithm remove_copy_if()用法及代码示例
- C++ Algorithm random_shuffle()用法及代码示例
- C++ Algorithm pop_heap()用法及代码示例
- C++ Algorithm replace()用法及代码示例
- C++ Algorithm set_intersection()用法及代码示例
- C++ Algorithm lower_bound()用法及代码示例
注:本文由纯净天空筛选整理自 C++ Algorithm is_heap()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。