#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://leetcode-cn.com/problems/kth-largest-element-in-a-stream/