具有结构的C++优先级队列

C++ Priority Queue with Struct

本文关键字:优先级 队列 C++ 结构      更新时间:2023-10-16

我正在使用带有Struct 的优先级队列

我的结构是下面的节点:

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

我的优先级队列如下:

    std::priority_queue<Node> pq;

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

我发现我必须重载方法"操作员"

所以我在下面做了

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

在我重载该方法后,pq对节点对象进行了排序,但通常有一些例外,即271268267261,268,249,<strong]255>、260,246256271是pq的最高值。

我该怎么办才能解决这种情况?我想如果我解决了这个问题,我就能完美地解决我的问题!

优先级队列将顶部元素(即将弹出的元素)保留为第一个元素。其他元素按未指定的顺序排列。

我打赌默认的实现是在封面下面使用堆结构,以使其尽可能高效。这就是为什么元素看起来是随机的。

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

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