使用int类型的priority_queue与自定义比较
Using a priority_queue of int with custom compare
我有从1
到n
的数字,以及大小为n
的优先级P
数组。我想声明一个优先级队列使用P
作为他们的优先级。
我不想定义一个包含数字及其优先级的新类型对象,我想使用int对象的优先级队列,并传递一个依赖于P
到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
给它,但这也没有工作。
我应该如何声明我的优先队列?
下面似乎可以工作:
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);
相关文章:
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- C++自定义比较函数
- 如何比较自定义类的std::变体
- std::设置自定义比较器
- 如何正确实现和访问运算符的各种自定义枚举器
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 自定义先决条件对移动分配运算符有效吗
- 使用VS Code和CMake Tools运行自定义命令
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- std::ranges::elements_view,用于自定义类似元组的数据
- 跟随整数索引列表的自定义类迭代器
- 参数化自定义CMake工具链
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 如何在自定义类中启用'auto loops'?
- 使用QJsEngine在Qt中注册自定义类型
- Qt自定义QPush按钮未显示在布局上
- 自定义对象的dlib序列化在gcc中失败
- 自定义创建QFuture
- 如何在QT中的自定义视频小工具t上绘制矩形