堆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;