1.priority_queue定义
template <class T, class Container = vector<T>,
class Compare = less<typename Container::value_type> > class priority_queue;
- 按着这个模板定义来看,需要给出每一个模板参数的类型,来实例化模板。
默认使用的是小于操作的比较运算符,底层使用vector来实现,算法使用make_heap,push_heap,pop_heap一系列堆操作来完成。
priority_queue<int> que;
2.使用自定义的比较规则来初始化priority_queue
- 对于使用lambda函数作为模板参数的情况如下代码的说明部分。
class student{
public:
int age;
string name;
friend bool operator<(const student& a, const student & b){
return a.age < b.age;
}
};
struct mycmp{
bool operator()(const student & a,const student & b){
return a.age < b.age;
}
};
bool cmpfunc(const student& a, const student& b){
return a.age < b.age;
}
priority_queue<student> que1;
priority_queue<student,vector<student>,mycmp> que2;
auto cmp = [](const student & a,const student & b){return a.age < b.age;};
priority_queue<student,vector<student>,decltype(cmp)> que4(cmp);
priority_queue<student,vector<student>,function<bool(const student&,const student&)>> que5(cmp);
priority_queue<student,vector<student>,function<bool(const student&,const student&)>> que6(cmpfunc);
function<bool(const student&,const student &)> func(cmpfunc);
priority_queue<student,vector<student>,function<bool(const student&,const student&)>> que7(func);
- 上述情况,也适用于其他的数据结构和算法。
- 例如:
lambda表达式
自定义函数算法,来进行结合STL算法和数据结构
的使用。
参考内容