template< class T, class Sequence=vector<T>, class Compare=less<typename Sequence::value_type> >
主要总结了几种比较函数cmp的写法
//eg.1.***********************************
struct node {
int id;
int w;
//...
};
struct cmp {
bool operator() (const node &a, const node &b)
{
return a.w > b.w;//大顶堆
}
};
priority_queue<node, vector<node>, cmp> que;
node a;
que.push(a);
cout<<que.top().id;
que.pop();
//return就是希望如何排列为true。如果希望由大到小,就将大到小的情况return;反则亦然。和sort的自定义cmp是一样的。
//eg.2.***********************************
struct node
{
int id;
int w;
//...
friend bool operator> (const node& a,const node& b)
{
return (a.w > b.w);
}
friend bool operator< (const node& a,const node& b)
{
return (a.w < b.w);
}
};
priority_queue<node, vector<node>, greater<node> > que;//注意两个>之间的空格;默认大顶堆
priority_queue<node, vector<node>, less<node> > que;
//或者可以只定义一个小于号,直接写
struct node
{
int id;
int w;
friend bool operator< (const node& a,const node& b)
{
return (a.w < b.w);
}
};priority_queue<node> que;
//eg.3.***********************************
struct Node
{
Node(int _x):x(_x){}
int x;
};
bool operator<(const Node &a, const Node &b)
{
return a.x>b.x;
}
priority_queue<Node> heap; //大顶堆
//eg.4.***********************************
struct Node//(指针版)
{
int h;
int l;
};
struct cmp
{
bool operator () (Node const *x, Node const *y)
{
if(x->h == y->h)
return x->l > y->l;
return x->h > y->h;
}
};
priority_queue<Node*, vector<Node*>, cmp> que;