我正在尝试为自定义Edge类设置优先级队列,其中Edges将按权重进行比较。
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;
}
};
我使用STL Priority Queue on custom class和http://gigi.nullneuron.net/comp/cpp-stl-priority-queue.php作为参考成功实施了std::priority_queue
,并使用这样的比较器,
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
相同的语法。
我试过
EdgeCompare comparator;
boost::heap::priority_queue<Edge> queue2(comparator.operator);
但是我收到一个错误,告诉我指定一个操作符。
我也试过重命名该函数,但后来我收到一个错误,告诉我一个函数指针只能用于调用该函数。
声明和传递比较器的正确方法是什么?
答案 0 :(得分:6)
是的,选项界面有些记录不足。您可以指定以下选项:
boost::heap::priority_queue<Edge, boost::heap::compare<EdgeCompare>>