2017-02-09 10 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();}); 

括弧[]の目的は何ですか。その関数定義の一部ですか?

また、bool演算子を使用して同じことを実装できますか?

+0

λ(http://en.cppreference.com/w/cpp/language/lambda)機能のキャプチャ節。 –

+0

ラムダです。 C++の本を読んでください。ラムダは、いくつかの短い文章で完全に説明することはできませんstackoverflow.com –

+0

@SamVarshavchikしかし、ここにラムダのドキュメントがあります:http://stackoverflow.com/documentation/c%2b%2b/572/lambdas#t = 201702161028176658324 – Brian

答えて

1

全体式

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

は、ラムダ式です。 2つの文字列引数、つまり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 

注意を。

パフォーマンスが重要な場合は、関数呼び出し演算子をインライン化できるので、名前付きクラスを定義する方が良いです。