什么是大根堆、小根堆呢?
大根堆,就是一个节点个数为k的二叉树结构,节点元素的val 按照根左右的顺序,所以根节点上的val是最大的值,而 最后的孩子节点中最右边的节点的val 是最小的值。
小根堆,就是元素的值排列相反,根节点上的val 是最小的值,最后孩子节点中的最右边的节点的val 是最大的值
有什么应用吗?常常在找前 k 个最大值/最小值 数据存储等场景
注意遍历 大根堆/小根堆 的元素 需要 top、pop两个函数结合使用
/*
大根堆 参考
*/
#include <iostream>
#include <vector>
#include <algorithm> // 包含 std::make_heap, std::push_heap, std::pop_heap 等函数
template <typename T, typename Container = std::vector<T>, typename Compare = std::less<typename Container::value_type>>
class priority_queue {
public:
// 构造函数
priority_queue(const Compare& comp = Compare(), const Container& ctnr = Container())
: c(ctnr), comp(comp) {
std::make_heap(c.begin(), c.end(), comp);
}
// 插入元素
void push(const T& value) {
c.push_back(value);