📅  最后修改于: 2023-12-03 15:13:55.011000             🧑  作者: Mango
C++ STL 中的 make_heap()
是一个函数模板,定义在 <algorithm>
头文件中,用于将一段范围内的元素转化为最大堆或最小堆。最大堆的定义是:父节点的元素值大于或等于子节点的元素值;最小堆的定义是:父节点的元素值小于或等于子节点的元素值。
template<class RandomAccessIterator>
void make_heap(RandomAccessIterator first, RandomAccessIterator last);
template<class RandomAccessIterator, class Compare>
void make_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp);
RandomAccessIterator
:随机访问迭代器,指向待转化为最大堆或最小堆的元素范围的起始位置。first
:待转化元素范围的第一个元素。last
:待转化元素范围的最后一个元素的下一个元素。comp
:自定义函数对象,用于指定元素间的比较方式。#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v {10, 30, 20, 5, 15};
// 转化为最大堆
std::make_heap(v.begin(), v.end());
for (const auto &i : v) {
std::cout << i << " ";
}
std::cout << std::endl;
// 转化为最小堆
auto cmp = [](int a, int b) { return a > b; };
std::make_heap(v.begin(), v.end(), cmp);
for (const auto &i : v) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
以上代码的输出结果为:
30 15 20 5 10
5 10 20 30 15
第一次调用 make_heap()
后,v
就被转化为了最大堆。第二次调用时,通过自定义比较方式,v
被转化为了最小堆。