在自定义比较中使用int的priority_queue

时间:2015-07-31 10:00:57

标签: c++ c++11 priority-queue

我有1n的数字,以及大小为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

1 个答案:

答案 0 :(得分:2)

选项#1

#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]; });

选项#2

auto cmp = [P] (int i, int j) { return P[i] < P[j]; };

std::priority_queue<int, std::vector<int>, decltype(cmp)> PQ(cmp);