我有1
到n
的数字,以及大小为P
的一系列优先级n
。
我想使用P
作为优先级来声明优先级队列。
我不想定义包含数字及其优先级的新类型的对象,我想使用int对象的优先级队列并将依赖于P
的自定义比较对象传递给{{ 1}}。我尝试了以下但是它不起作用:
std::priority_queue
我还尝试使用std::priority_queue<int, vector<int>, [P](int i, int j){ return P[i]<P[j]; }> PQ;
成员和构造函数定义一个类,我可以将bool operator(int i, int j) {P[i] < P[j]}
传递给它,但这也不起作用。
我应该如何申报优先级队列?
以下似乎有效:
P
答案 0 :(得分:2)
#include <functional>
// ...
std::priority_queue<int
, std::vector<int>
, std::function<bool(int,int)>
>
PQ([P] (int i, int j) { return P[i] < P[j]; });
auto cmp = [P] (int i, int j) { return P[i] < P[j]; };
std::priority_queue<int, std::vector<int>, decltype(cmp)> PQ(cmp);