2013-02-20 76 views
0

我的問題是:priority_queue聲明和布爾運算符<聲明

  • 我有我的計劃有2類加爲主;

  • 我已經在一個類的成員函數中聲明瞭一個priority_queue;

  • 我必須定義的比較,我想我應該使用的代碼是:

    // Determine priority (in the priority queue) 
    bool operator < (const node & a, const node & b) 
    { 
        return a.getPriority() > b.getPriority(); 
    } 
    

問:我應該在哪裏插入這段代碼?有人能幫助我嗎?

謝謝

+0

爲什麼不讓它成爲'node'的成員函數? – jrok 2013-02-20 13:58:29

+0

,因爲我得到一個錯誤:函數「運算符」的參數太多 – user1783116 2013-02-20 14:05:19

+1

成員運算符函數只能帶1個參數:'bool operator <(const node&other){return this-> priority jrok 2013-02-20 14:07:52

回答

1

看起來你的operator<可能是node的一個不好的補充。問問自己:節點在邏輯上是否可比?是否清楚比較節點(priorty_queue的上下文之外)應該比較它們的優先級?也許它應該比較它們的位置或其他可能包含的內容。如果您提供operator<,則讓其他5個比較運算符也是有意義的。如果不清楚node < node實際比較的是什麼,請不要爲節點提供operator<。在這樣的情況下,最好提供自定義比較的priority_queue ...

struct NodeComparer 
{ 
    bool operator()(const node& left, const node& right) 
    { 
     return left.GetPriority() > right.GetPriority(); 
    } 
} 

...

std::priority_queue<node, std::vector<node>, NodeComparer> nodeQueue; 

這樣你priority_queue可以作爲期望的,但你不加不合邏輯的功能到node

+0

好吧,我明白你的意思。問題依然存在:我在A類的成員函數中有一個優先級隊列,並且我已經分別定義了一個類「節點」。我在哪裏插入你的代碼? – user1783116 2013-02-20 14:20:52

+0

我把結構放在包含使用pq的成員函數的類的上面....現在它似乎工作!感謝您的建議 – user1783116 2013-02-20 14:28:36

+0

@ user1783116您也可以將包含'priority_queue'的類嵌套爲private,因爲它是該類的實現細節。 – David 2013-02-20 14:41:16

0

在聲明priority_queue的位置應該看到此運算符。由於優先級隊列僅存在於成員中,因此我會將運算符的定義置於實現該方法的.cpp文件中給定方法定義的上方。

+0

是的,你是對的。實際的問題是「node」是一個類,「A-star」是另一個類,其中我有成員函數,我已經使用了priority_queue。我能怎麼做? – user1783116 2013-02-20 14:08:25