首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost::heap::priority_queue与std::priority_queue的比较器

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

Stack Overflow用户
提问于 2014-06-16 14:01:11
回答 1查看 2.7K关注 0票数 2

我正在尝试为一个自定义边缘类设置一个优先级队列,在这个队列中,边将根据它们的权重进行比较。

代码语言:javascript
复制
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 classhttp://gigi.nullneuron.net/comp/cpp-stl-priority-queue.php作为参考成功地实现了一个比较器,

代码语言:javascript
复制
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相同的语法。

我试过了

代码语言:javascript
复制
EdgeCompare comparator;
boost::heap::priority_queue<Edge> queue2(comparator.operator);

但是我得到了一个错误,告诉我要指定一个操作符。

我也尝试重命名函数,但是后来我得到一个错误,告诉我指向函数的指针只能用来调用函数。

什么是正确的方式来声明和通过比较器?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-16 14:11:23

是的,选项界面有点缺乏文档.您可以指定如下选项:

代码语言:javascript
复制
boost::heap::priority_queue<Edge, boost::heap::compare<EdgeCompare>>
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24245521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档