做大小根堆相关用到的东西

#include <iostream>
#include <algorithm>//sort
#include <vector>
#include <functional>//greater和less
#include <queue>//priority_queue

priority_queue<int,vector<int>,greater<int>> q;//从小到大
q.pop()//弹出最小的那个(队列头)
q.push(val)//压进一个数val,排好序
int x=q.top()//返回队列头的数

vector<int> nums;
nums.pop_back();//去掉vector里最后一个元素

sort(nums.begin(),nums.end(),greater<int>());//从大到小
sort(nums.begin(),nums.end(),less<int>());//从小到大
sort(nums.begin(),nums.end());//从小到大

make_heap(nums.begin(),nums.end(),greater<int>());//把nums排成小根堆
make_heap(nums.begin(),nums.end(),less<int>());//把nums排成大根堆
make_heap(nums.begin(),nums.end());//把nums排成大根堆

pop_heap(nums.begin(),nums.end());//将堆的第零个元素(nums[0])与最后一个元素交换位置,然后针对前n - 1个元素调用make_heap()函数,它也有三个参数,参数意义与make_heap()相同。这里是将前n-1个元素排成大根堆
pop_heap(nums.begin(),nums.end(),greater<int>());//将堆的第零个元素(nums[0])与最后一个元素交换位置,然后将前n-1个元素排成大根堆(和上面那个一样)
pop_heap(nums.begin(),nums.end(),less<int>());//将堆的第零个元素(nums[0])与最后一个元素交换位置,然后将前n-1个元素排成小根堆

nums.emplace_back(val);
push_heap(nums.begin(),nums.end(),greater<int>())//将nums的前n-1个元素视为小根堆,把nums的最后一个元素插入到堆中
push_heap(nums.begin(),nums.end(),less<int>())//将nums的前n-1个元素视为大根堆,把nums的最后一个元素插入到堆中
push_heap(nums.begin(),nums.end())//将nums的前n-1个元素视为大根堆,把nums的最后一个元素插入到堆中

优先队列用greater和less时后面不加“()”

优先队列,实现pair<int,int>,second大的放在队头:

auto cmp=[](pair<int,int> a,pair<int,int> b){return a.second<b.second;};//return true 则将a放b后面(这个和sort相反)
priority_queue<pair<int,int>,vector<pair<int,int>>,decltype(cmp)> q(cmp);//second大的放前面

参考:

https://www.cnblogs.com/woxiaosade/p/10628388.html#:~:text=make_heap,%28%29%E7%94%A8%E4%BA%8E%E6%8A%8A%E4%B8%80%E4%B8%AA%E5%8F%AF%E8%BF%AD%E4%BB%A3%E5%AE%B9%E5%99%A8%E5%8F%98%E6%88%90%E4%B8%80%E4%B8%AA%E5%A0%86%EF%BC%8C%E9%BB%98%E8%AE%A4%E6%98%AF%E5%A4%A7%E9%A1%B6%E5%A0%86%E3%80%82

https://leetcode-cn.com/problems/kth-largest-element-in-a-stream/

http://c.biancheng.net/view/480.html

https://blog.csdn.net/qq_38210354/article/details/107506784?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6.topblog&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6.topblog&utm_relevant_index=12

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值