优先队列的格式:
priority_queuq<type, container, function>;
//默认的情况是priority_queue<int, vector<int>, greater<int>>,即大顶堆,排序显示的从小到大.
解决问题:vector<int> nums = {1,2,3,4},vector<int> nums1 = {1,1,2},都是有序的.求nums[i] + nums1[j]的前k个最小值.
方法:看到前k小,首先想到的就是堆,k小就是大顶堆,因为大的都出去了,小的在堆中.最后遍历一下堆就能得出结果.
代码:
struct cmp1{
bool operator()(const pair<int, int> &a, const pair<int, int> &b){
return a.first + a.second < b.first + b.second;
}
};
priority_queue<pair<int, int>, vector<pair<int, int>>, cmp1> mp;
//这样在执行mp.push(make_pair(nums[i], nums1[j]));时就会自动的就行排序.
//使用优先队列来模拟堆的运行在c++中是很方便的.
//堆的函数
/*
ma.pop();
ma.top();
ma.empty();
ma.size();
ma.emplace();
ma.push();
*/