通过vector 建立堆
默认最大堆
1、建立:make_heap:在容器范围内,就地建堆,保证最大值在所给范围的最前面,其他值的位置不确定
vector<int> nums = {4, 5, 1, 3, 2};
make_heap(nums.begin(), nums.end());
2、弹出:pop_heap:将堆顶(所给范围的最前面)元素移动到所给范围的最后,并且将新的最大值置于所给范围的最前面
pop_heap(nums.begin(), nums.end());
nums.pop_back();
3、push进去:push_heap:当已建堆的容器范围内有新的元素插入末尾后,应当调用push_heap将该元素插入堆中
nums.push_back(6);
push_heap(nums.begin(), nums.end());
自己写CMP
push_heap(nums.begin(), nums.end()greater<int.> ());是最小堆
[](int a, int b)-> bool {return a>b;}
通过priority建立堆
默认最大堆
priority_queue<int, vector<int>, greater<int>> minHeap;
less
minHeap.top();
minHeap.pop();
minHeap.push(seatNumber);
自己写CMP
struct node
{
int x, y;
node(int x, int y):x(x),y(y){}
bool operator< (const node &b) const //写在里面只用一个b,但是要用const和&修饰,并且外面还要const修饰;
{
if(x == b.x) return y >= b.y;
else return x > b.x;
}
};
priority_queue<node> pq;
参考
1、https://blog.csdn.net/u012604810/article/details/80912794
2、https://blog.csdn.net/AAMahone/article/details/82787184