带结构的{C ++优先级队列

时间:2015-12-04 20:12:58

标签: c++ struct priority-queue

我正在使用带结构的优先级队列

我的结构是下面的节点:

struct Node{
int level;
int bound;
int total;};

我的优先队列如下:

    std::priority_queue<Node> pq;

我想要做的是将我的优先级队列(pq)排序为 Node.bound 的值,以便bound的值为最大值的Node对象位于优先级队列的顶部

我发现我必须重载方法&#39;运算符&#39;

所以我按照下面这样做了

bool operator<(Node const& lhs, Node const& rhs) {
return lhs.bound < rhs.bound;}

在我重载该方法之后,pq对节点对象进行了排序,但是有一些常见的例外是271,268,267,261, 268 ,249, 255 ,260, 246,256 271是pq的最高值。

我该怎么做才能解决这个问题? 我想如果我解决这个问题,我可以完美地解决我的问题!

1 个答案:

答案 0 :(得分:1)

优先级队列将顶部元素(即将弹出的元素)保留为第一个元素。其他元素的顺序不明确。

我认为默认实现是在封面下使用堆结构,以使其尽可能高效。这就是元素似乎是随机顺序的原因。

请注意,这就是为什么std::priority_queue接口只允许pop()个元素,并且不提供对队列中元素的随机访问。

附加说明:优先级队列的顺序由第三个模板参数定义。如果您没有定义它,则默认为std::less,默认情况下会使用operator<进行比较。