簡體   English   中英

具有結構的C ++優先級隊列

[英]C++ Priority Queue with Struct

我在Struct中使用Priority Queue

我的結構是下面的節點:

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

我的優先級隊列如下:

    std::priority_queue<Node> pq;

我想做的是將優先級隊列(pq)排序為Node.bound的值, 使bound為最大的Node對象位於優先級隊列的頂部。

我發現我必須重載方法'operator'

所以我做了如下

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

我重載方法后,PQ排序節點對象,但也有一些經常例外271268267261,268,249,255,260,246256 271是PQ的頂部值。

我該怎么辦才能解決這種情況? 我想如果解決這個問題,我就能完美解決我的問題!

優先級隊列將頂部元素(即將彈出的元素)保留為第一個元素。 其他元素的順序不確定。

我敢打賭,默認實現是在幕后使用堆結構,以使其盡可能高效。 這就是為什么元素似乎按隨機順序排列的原因。

請注意,這就是為什么std::priority_queue接口僅允許您pop()元素,而不提供對隊列中元素的隨機訪問的原因。

附加說明 :優先級隊列的順序由第三個模板參數定義。 如果未定義,則默認為std::less ,默認情況下將使用operator<進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM