boost::heap::priority_queue与std::priority_queue的比较器
Comparator for boost::heap::priority_queue vs std::priority_queue
我正试图为自定义边缘类设置一个优先队列,其中边缘将按其权重进行比较。
class Edge
{
public:
int index;
double weight;
std::pair<int, int> vertices;
Edge(int i, double w, int start, int end)
{
index = i;
weight = w;
vertices.first = start;
vertices.second = end;
}
};
我成功地实现了一个std::priority_queue
使用STL优先队列自定义类和http://gigi.nullneuron.net/comp/cpp-stl-priority-queue.php作为参考,与这样的比较器,
struct EdgeCompare
{
bool operator()(const Edge &e1, const Edge &e2) const
{
return e1.weight < e2.weight;
}
}
std::priority_queue<Edge, std::vector<Edge>, EdgeCompare> queue;
然而,我意识到std::priority_queue
没有提供迭代器。这是一个功能,我真的很想有,所以我决定切换到boost::heap::priority_queue
。我知道boost::heap::priority_queue
有一个将设置自定义比较器的构造函数。然而,我找不到任何例子来解释如何最好地传递函数。显然,我不能使用与std::priority_queue
相同的语法。
I tried
EdgeCompare comparator;
boost::heap::priority_queue<Edge> queue2(comparator.operator);
但是我得到一个错误,告诉我指定一个操作符
我也尝试重命名函数,但随后我得到一个错误,告诉我一个函数的指针只能用于调用函数。
声明和传递比较器的正确方法是什么?
是的,选项接口的文档有些不足。您可以这样指定选项:
boost::heap::priority_queue<Edge, boost::heap::compare<EdgeCompare>>
相关文章:
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 将参数打包的参数传递到 std::queue 中,以便稍后使用不同的函数调用
- C++ queue.front();为什么不从第一个元素开始呢?
- 我可以擦除 std::queue 中间的节点吗?
- 获取大小时是否必须锁定 std::queue?
- 为什么我会收到"invalid conversion from 'Queue*/Stack*' to 'int'"错误消息?
- 销毁 std::queue 会导致内存错误
- 如何将一个 std::queue 的内容附加到另一个
- 使用元素加载 std::queue<uint8_t*> 的更有效方法?
- 为什么 std::queue 没有实现 insert() 而 std::d eque 实现了?
- 带有 std::vector 和 std::queue 的 Prim's 算法,我的代码有什么问题?
- C++程序在 #include 时无法编译<stack>,#include<queue>
- 是boost :: lockfree :: Queue(在多线程程序中)可锁定
- std :: queue :: pop()在其std :: unique_ptr数据上操作
- 通过 std::queue 中的元素的值获取元素的索引
- 如何索引指向数组 [queue] 的指针数组
- 像std::queue这样的c++标准库容器是否保证是可重入的
- 如何使用"priority"进行多线程处理?
- 在 boost::lockfree:queue 默认构造函数的情况下断言失败
- C++ Floating-Point van Emde Boas (vEB) Priority Queue