#include<queue>
#include<vector>
#include<iostream>
using namespace std;
struct mycomp
{
bool operator()(const int&a,const int&b)//这个返回true or false 有什么用吗
{return a>b;}
};
int main()
{
priority_queue<int,vector<int>,mycomp> pq;
pq.push(1);//1进队列的时候 a和b是多少,这四个数进去的过程是怎样的??
pq.push(9);
pq.push(2);
pq.push(30);
while(pq.empty()!=true)
{cout<<pq.pop()<<" "; pq.pop();}
cout<<endl;
return o;
}
最后结果是:1 2 9 30 我就很不清楚1 9 2 30 输入的怎么就变成了1 2 9 30 哪位知道的大神能给我讲讲?
priority_queue 是优先级队列,看它的定义:
template<class _Ty,
class _Container = vector<_Ty>,
class _Pr = less<typename _Container::value_type> >
class priority_queue{};
注意 class _Pr ,它要求你提供一个实现了comp方法的类,你这里提供的就是 mycomp,这是早期的stl实现类似委托的一种方式(不同于函数指针),新的stl也提供了委托的实现。
谢谢大神,那()的重载具体怎样实现了,输入安大小排序的呢?
@yskyj: 请看一下 STL 中的 functor 的知识:http://blog.csdn.net/chinaclock/article/details/5785135
@Launcher: 那篇文章看了两遍,我感觉我难以理解那篇文章,不过谢谢你给我提供帮助,谢谢!
@yskyj: functor 是一种编程技巧,规避了函数指针,使用C++支持的操作符重载来实现函数指针的功能。