堆STL和重载运算符

  • 大根堆:

    1.priority_queue<int> q;【默认

    2. priority_queue< node,vector<node>,less<node> > q;【自带比较函数

  • 小根堆:

    priority_queue< node,vector<node>,greater<node> > q;【自带比较函数

  • 重载运算符:

   1.定义struct node 之后重载

    这是小根堆

1 priority_queue<node>q;//或 priority_queue< node,vector<node>,less<node> >q; 
2 bool operator<(node a,node b)//或写做(const node &a,const, node &b) 更快 
3 {
4     return a.y>b.y;//以y从小到大排序
5 }

   2.在定义struct node时重载

1 struct node
2 {
3     int id,v;
4     bool operator<(const node &a) const{
5         return v<a.v;//以v从大到小排序
6     }
7 };
8 priority_queue<node>q;

   3.定义友元操作类重载函数

1 struct node
2 {
3     int v;
4     friend bool operator<(const node &a,const node &b){
5         return a.v<b.v;  //按v从大到小排列
6     }
7 };
8 priority_queue<node>q;
  • 自定义比较函数模板结构
1 struct cmp
2 {
3     bool operator ()(const node &a, const node &b)
4     {
5         return a.v>b.v;// 按照v从小到大排列
6     }
7 };
8 priority_queue<node,vector<node>,cmp> q;

 

posted @ 2018-10-17 15:05  flowphyl  阅读(891)  评论(0编辑  收藏  举报