第一季度
https://en.cppreference.com/w/cpp/container/priority_queue
我在看这个网页,在模板参数部分比较这样说。
但是因为优先级队列首先输出最大的元素,所以“先来”的元素实际上是最后输出的。
我学会了这样的堆实现。
parent node : i / 2
left child node : i * 2
right child node : i * 2 + 1
所以如果我做最大堆,那么数组就会像这样。
所以我不明白为什么在元素之前会输出最后一个意思。我错过了什么?
第二季度
我想为排序和优先级队列制作自定义比较对象。这是我的代码。
struct Compare
{
bool operator()(vector<int>& l, vector<int>& r) { return r[1] < l[1]; }
};
bool compare(vector<int>& l, vector<int>& r) { return l[0] < r[0]; }
int solution(vector<vector<int>> jobs) {
sort(jobs.begin(), jobs.end(), compare);
priority_queue<vector<int>, vector<vector<int>>, Compare> jobQueue;
}
我希望排序应该是升序的,priority_queue 应该是最小堆以首先弹出最少元素。并且代码工作正常。
但我觉得类似比较分开的代码有点不漂亮。
我希望该比较函数与比较类联合,但将重新声明 operator() 函数。
可以统一代码吗?