boost::heap::priority_queue与std::priority_queue的比较器

Comparator for boost::heap::priority_queue vs std::priority_queue

本文关键字:queue priority 比较器 std heap boost      更新时间:2023-10-16

我正试图为自定义边缘类设置一个优先队列,其中边缘将按其权重进行比较。

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>>