2013-03-26 95 views
2
struct node 
{ 
node *right; 
node *left; 
int data; 
}; 

這是我的結構節點。 現在我正在使用順序STL優先級隊列中提取分鐘即最小從優先級隊列這樣如何創建節點結構類型的Min stl priority_queue

std::priority_queue<node*, std::vector<node*>, std::greater<node*> > mypq; 

但我沒有得到的最​​小和google搜索,我發現(較大),它用於整數,我得到了另一個答案,我實現這樣的

struct compare 
{ 
bool operator()(const node*& l, const node*& r) 
    { 
    return l > r; 
    } 
}; 

而且我用這樣的

std::priority_queue<node*, std::vector<node*>,compare > mypq; 

但它顯示錯誤,我很沮喪,任何BOD請幫助我

回答

3

比較函數應該有兩個參數,它們是優先級隊列中元素的類型。你的元素的類型是node*,所以你的函數應該定義爲bool operator()(node* l, node* r)。現在,你可以寫的比較函數考慮到這一點:

struct compare 
{ 
    bool operator()(node* l, node* r) 
    { 
    return l->data > r->data; 
    } 
}; 
2
struct compare 
{ 
bool operator()(const node*& l, const node*& r) 
    { 
    return l->data > r->data; 
    } 
}; 
1

假設你想使用該結構的data領域來比較,這種類型的仿函數應該工作:

struct compare 
{ 
    bool operator()(const node* l, const node* r) const 
    { 
    return l->data > r->data; 
    } 
}; 

其中bool operator()const,因爲調用它不應該改變它的狀態。 C++標準並不要求它是一個const方法,但有些實現可能需要它,導致編譯錯誤。

+1

偉大的一點,我總是錯過''const''。 – gongzhitaao 2013-03-26 17:21:14