priority_queue pq;
默认从大到小排序,整数中元素大的优先级高。
方法:
.empty():判断是否为空
.pop():弹出队头元素
.push():加入新元素到队列
.top():获得队头元素
.size():获得队列长度
.emplace() :相当于push,写题很方便,比如对于pair<int,int>可以直接pq.emplace(1,2);
emplace_back() 和 push_back() 的区别:
emplace_back() 和 push_back() 的区别,就在于底层实现的机制不同。push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素);而 emplace_back() 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。参考链接
使用基本数据类型,默认是大顶堆。
priority_queue<int> //大顶堆。
priority_queue<int,vector<int>,less<>> //大顶堆
priority_queue<int,vector<int>,greater<>>//小顶堆
使用pair,判断第一个元素
priority_queue<pair<int, int>, vector<pair<int, int>>, less<>> busy; //大顶堆 判断第一个元素
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> busy; //小顶堆 判断第一个元素
使用自定义pair排序
struct cmp_max{
template <typename T, typename U>
bool operator()(T const &left, U const &right) {
return left.second < right.second; // 大顶堆
}
};
struct cmp_min{
template <typename T, typename U>
bool operator()(T const &left, U const &right) {
return left.second > right.second; // 小顶堆
}
};
priority_queue<pair<int,int>,vector<pair<int,int>>,cmp_min> pq;
使用外部数组+队列存储下标来排序
auto cmp =[&nums1,&nums2] (const pair<int,int> &a, const pair<int,int> &b){
return nums1[a.first]+nums2[a.second] > nums1[b.first]+nums2[b.second];
};
priority_queue<pair<int,int>,vector<pair<int,int>>,decltype(cmp)> pq(cmp);
for(int i=0;i<min(n,k);i++) pq.emplace(i,0);