2013-03-26 156 views
0

我已經創建了節點的優先級隊列,我已經'推送'節點到隊列中,假設它將按照整數值的順序對節點進行排序。我想我錯了。該節點具有屬性int freq和char c。我希望它按整數順序排序,從最小到最大。節點的優先級隊列

priority_queue<Node*> Q; 
for(i =0; i< 95; i++){ 
    Q.push(node_array[i]); 
} 

for(i =0; i< 95; i++){ 
    cout<< Q.top() << endl; 
    Q.pop(); 
} 

我該如何按照'freq'進行排序?

+3

滑稽你應該問的是,這是字面上剛纔問的時刻:http://stackoverflow.com/questions/15646451/stl-priority-queue-and-overloading-with-pointers – 2013-03-26 20:31:39

+1

@ShafikYaghmour可能是一些大學的任務。 – 2013-03-26 20:44:07

+0

@sftrabbit我看到它,它似乎與我的任務無關。如果我認識這個人,那會很有趣。 – 2013-03-26 20:46:28

回答

2

您的priority_queue比較比較指針,即內存地址。您需要提供一個節點比較二元仿函數,它有兩個Node*,並實現了所需的邏輯:

struct node_cmp 
{ 
    bool operator()(const Node* a, const Node* b) const 
    { 
    return a->someField < b->someField; 
    } 
}; 

使用它來實例化優先級隊列:

std::priority_queue<Node*, std::vector<Node*>, node_cmp> Q; 
+0

如何在隊列的main()中使用它? – 2013-03-26 20:33:39

+0

@AdegokeA我剛剛添加了一個例子。 – juanchopanza 2013-03-26 20:34:28

+0

爲什麼std :: vector 在那裏?我嘗試了priority_queue Q;並有錯誤。 – 2013-03-26 20:38:48