2015-04-12 47 views
0

,什麼是正確的成語來創建std::priority_queue<C>它使用標準<比較器,沒有結束C但在f(C)C++的std :: priority_queue比較使用給定的類<code>C</code>和功能<code>int f(C c)</code>改造

+0

寫出與優先級隊列模板使用的謂詞,即*不*使用的操作'<'或'等價的std :: less'在隊列中。爲了實現這個謂詞,你當然可以使用它們。請注意,這意味着您可以*不使用'priority_queue ',但您必須指定第三個模板參數(也就是第二個參數)。 –

+0

@UlrichEckhardt這是否需要製作一個仿函數對象?我怎麼能把謂詞放入模板參數中? – SRobertJames

+0

不是一個對象,而是一個類型。你也可以提供一個函數指針,這可能是最簡單的方法。如果您查找涉及類模板'set'和'map'或算法'find_if'和'sort'的示例,應該可以找到相關示例。 –

回答

0

參考1

``// binary predicate function 
    bool Compare1(C item1, C item2){ 
      return f(item1) > f(item2); 
    }` 

    //`binary predicate functor 
    class Compare2 
    { 
    public: 
     bool operator() (C item1, C item2) 
     { 
      return f(item1) > f(item2); 
     } 
    }; 


int main() 
{ 
    std::priority_queue<C, std::vector<C>, std::function<bool(C, C)>> pq1(Compare1); 

    std::priority_queue<C, std::vector<C>, Compare2> pq2; 
    return 0; 
} 
相關問題