我正在使用带结构的优先级队列
我的结构是下面的节点:
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的最高值。
我该怎么做才能解决这个问题? 我想如果我解决这个问题,我可以完美地解决我的问题!
答案 0 :(得分:1)
优先级队列将顶部元素(即将弹出的元素)保留为第一个元素。其他元素的顺序不明确。
我认为默认实现是在封面下使用堆结构,以使其尽可能高效。这就是元素似乎是随机顺序的原因。
请注意,这就是为什么std::priority_queue
接口只允许pop()
个元素,并且不提供对队列中元素的随机访问。
附加说明:优先级队列的顺序由第三个模板参数定义。如果您没有定义它,则默认为std::less
,默认情况下会使用operator<
进行比较。