2017-02-09 72 views
1

我在看C++優先隊列的聲明,但我不太明白。C++優先隊列聲明

priority_queue<string, vector<string>,function<bool(string,string)>> 
min_heap([] (const string& a,const string& b) {return a.size()>=b.size();}); 

括號[]的用途是什麼?這是函數定義的一部分嗎?

另外,我可以通過使用布爾操作符來實現相同的事情嗎?

+0

它是λ(http://en.cppreference.com/w/cpp/language/lambda)函數的捕獲子句。 –

+0

這是一個lambda。去閱讀一本C++書。 Lambdas不能完全解釋在幾​​個簡短的句子上stackoverflow.com –

+0

@SamVarshavchik有,但是,在這裏的lambda的文檔在SO上:http://stackoverflow.com/documentation/c%2b%2b/572/lambdas#t = 201702161028176658324 – Brian

回答

1

整個表達

[] (const string& a,const string& b) {return a.size()>=b.size();} 

是λ表達式。它是一個未命名類的對象,可以用兩個字符串參數ab調用,並返回bool

你也可以寫這樣一類自己(在這種情況下,將有一個名稱):

struct Comp { 
    bool operator()(const string& a, const string& b) { 
     return a.size() > b.size(); 
    } 
}; 
priority_queue<string, vector<string>, Comp> min_heap; 
// a value of type Comp will be value-initialized 

注意,比較必須是嚴格弱排序,所以你必須使用>代替>=

如果性能很重要,最好定義一個命名類,因爲函數調用操作符可以內聯。