定义:priority_queue<Type, Container, Functional>
Type 就是数据类型,Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector),Functional 就是比较的方式,当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆。
pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。
这里采用优先队列priority_queue使用自定义排序函数:
class Solution {
struct cmp{
bool operator()(pair<int, int>& a,pair<int, int>& b){
return a.first*a.first + a.second*a.second < b.first*b.first + b.second*b.second;
}
};
public:
vector<vector<int>> kClosest(vector<vector<int>>& points, int K) {
vector<vector<int>> res;
priority_queue<pair<int, int>, vector<pair<int, int>>, cmp> q;
for(int i = 0; i < points.size(); i++){
pair<int, int> x;
x.first = points[i][0];
x.second = points[i][1];
q.push(x);//这里会按照自己写的cmp排序
if(q.size() > K) q.pop();//排序后弹出多余K个的数据
}
while(!q.empty()){
res.push_back({q.top().first, q.top().second});//注意加{}
q.pop();
}
return res;
}
};