2017-02-09 71 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 

注意,比较必须是严格弱排序,所以你必须使用>代替>=

如果性能很重要,最好定义一个命名类,因为函数调用操作符可以内联。