优先队列priority_queue、仿函数
【摘要】
优先队列如果要自定义排序函数,只能用仿函数,不能用普通函数的指针。
示例:
#include<iostream>#include<queue>#include<functional>using namespace std; class cmp{public: bool operator()(int...
优先队列如果要自定义排序函数,只能用仿函数,不能用普通函数的指针。
示例:
-
#include<iostream>
-
#include<queue>
-
#include<functional>
-
using namespace std;
-
-
class cmp
-
{
-
public:
-
bool operator()(int a, int b)
-
{
-
return a < b;
-
}
-
};
-
-
bool cmp2(int a, int b)
-
{
-
return a < b;
-
}
-
-
template <typename A>
-
void display()
-
{
-
A q;
-
q.push(1);
-
q.push(3);
-
q.push(4);
-
q.push(2);
-
while (!q.empty())
-
{
-
cout << q.top();
-
q.pop();
-
}
-
cout << endl;
-
}
-
-
int main()
-
{
-
display < priority_queue<int, vector<int>> >(); //默认大顶堆
-
display < priority_queue <int, vector<int>, greater<int>> >();//小顶堆
-
display < priority_queue <int, vector<int>, less<int>> >();//大顶堆
-
display < priority_queue<int, vector<int>, cmp>>();//大顶堆
-
//display < priority_queue<int, vector<int>, cmp2>>(); 错误
-
return 0;
-
}
输出:
4321
1234
4321
4321
附上priority_queue的实现代码:
-
// TEMPLATE CLASS priority_queue
-
template<class _Ty,
-
class _Container = vector<_Ty>,
-
class _Pr = less<typename _Container::value_type> >
-
class priority_queue
-
{ // priority queue implemented with a _Container
-
public:
-
......
-
一堆函数
-
......
-
protected:
-
_Container c; // the underlying container
-
_Pr comp; // the comparator functor
-
};
可以看出模板参数_Pr的默认值是less,也就是说默认排序函数是less函数。
priority_queue中包含一个排序的序列,堆顶是这个序列的最后一个元素,所以从小到大排序是大顶堆,从大到小排序是小顶堆。
文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/nameofcsdn/article/details/104831555
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)