make_heap()是生成一个堆,大顶堆或小顶堆
- make_heap(_RAIter,_RAIter) 默认生成大顶堆
- make_heap(_RAIter,_RAIter,_Compare) _Compare有两种参数,一种是greater(生成小顶堆),一种是less(生成大顶堆)
push_heap()是向堆中插入一个元素,并且使堆的规则依然成立
- push_heap(_RAIter,_RAIter) 默认为大顶堆
- push_heap(_RAIter,_RAIter,_Compare) _Compare有两种参数,一种是greater(小顶堆),一种是less(大顶堆)
- 调用push_heap之前必须调用make_heap创建一个堆
- 首先数组push_back插入元素,然后再调用push_heap,它会使最后一个元素插到合适位置
- 注意,push_heap中的_Compare和make_heap中的_Compare参数必须是一致的,不然会插入堆失败,最后一个元素还是在最后位置,导致插入失败
pop_heap()是在堆的基础上,弹出堆顶元素
- pop_heap(_RAIter,_RAIter) 默认为大顶堆
- pop_heap(_RAIter,_RAIter,_Compare) _Compare有两种参数,一种是greater(小顶堆),一种是less(大顶堆)
- 比如pop_heap(nums.begin(), nums.end(),greater<int>()),它会将堆顶元素(即为数组第一个位置)和数组最后一个位置对调,然后你可以调用数组pop_back,删除这个元素
- 注意,pop_heap中的_Compare和make_heap中的_Compare参数必须是一致的,不然会失败