我正在尝试为一个自定义边缘类设置一个优先级队列,在这个队列中,边将根据它们的权重进行比较。
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作为参考成功地实现了一个比较器,
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);但是我得到了一个错误,告诉我要指定一个操作符。
我也尝试重命名函数,但是后来我得到一个错误,告诉我指向函数的指针只能用来调用函数。
什么是正确的方式来声明和通过比较器?
发布于 2014-06-16 14:11:23
是的,选项界面有点缺乏文档.您可以指定如下选项:
boost::heap::priority_queue<Edge, boost::heap::compare<EdgeCompare>>https://stackoverflow.com/questions/24245521
复制相似问题