使用int类型的priority_queue与自定义比较

Using a priority_queue of int with custom compare

本文关键字:queue 自定义 比较 priority int 类型 使用      更新时间:2023-10-16

我有从1n的数字,以及大小为n的优先级P数组。我想声明一个优先级队列使用P作为他们的优先级。

我不想定义一个包含数字及其优先级的新类型对象,我想使用int对象的优先级队列,并传递一个依赖于Pstd::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给它,但这也没有工作。

我应该如何声明我的优先队列?


下面似乎可以工作:

class MyLess{
 public:
  MyLess(const int* p) {p_ = p;}
  bool operator()(const int &lhs, const int &rhs) const { return p_[lhs] < p_[rhs]; }
 private:
  const int* p_;
};
...
std::priority_queue<int, vector<int>, MyLess> PQ(P);

选项#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);