C ++优先级队列声明

时间:2017-02-09 02:30:01

标签: c++ heap priority-queue

我正在查看C ++中的优先级队列声明,但我不太明白。

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

括号[]的目的是什么?这是函数定义的一部分吗?

另外,我是否可以通过使用bool运算符实现相同的功能?

1 个答案:

答案 0 :(得分:1)

整个表达

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

是lambda表达式。它是一个未命名类的对象,可以使用两个字符串参数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

请注意,比较器必须是严格的弱排序,因此您必须使用>而不是>=

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