0
,什麼是正確的成語來創建std::priority_queue<C>
它使用標準<
比較器,沒有結束C
但在f(C)
?C++的std :: priority_queue比較使用給定的類<code>C</code>和功能<code>int f(C c)</code>改造
,什麼是正確的成語來創建std::priority_queue<C>
它使用標準<
比較器,沒有結束C
但在f(C)
?C++的std :: priority_queue比較使用給定的類<code>C</code>和功能<code>int f(C c)</code>改造
參考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;
}
寫出與優先級隊列模板使用的謂詞,即*不*使用的操作'<'或'等價的std :: less'在隊列中。爲了實現這個謂詞,你當然可以使用它們。請注意,這意味着您可以*不使用'priority_queue',但您必須指定第三個模板參數(也就是第二個參數)。 –
@UlrichEckhardt這是否需要製作一個仿函數對象?我怎麼能把謂詞放入模板參數中? – SRobertJames
不是一個對象,而是一個類型。你也可以提供一個函數指針,這可能是最簡單的方法。如果您查找涉及類模板'set'和'map'或算法'find_if'和'sort'的示例,應該可以找到相關示例。 –