由于经常忘记如何重载运算符,所以有了这篇文章
重载运算符的语句如下:
返回类型 operator重载运算符(参数){内容}
比如说:
bool operator>(const node& x){ return a>x.a; }
这样我们就重载了大于号“\(>\)”,用来比较\(node\)结构体中\(a\)变量的大小。
#include<iostream> #include<cstdio> using namespace std; struct node{ int a,b; bool operator>(const node& x){ return a>x.a;//或者是 return this->a>x.a; } }; int main(){ node x1={3,5},x2={5,3}; cout<<(x1>x2); return 0; }
如该代码的输出就是0
。
#include<iostream> #include<cstdio> using namespace std; struct node{ int a,b; bool operator>(const node& x){ return b>x.b; } }; int main(){ node x1={3,5},x2={5,3}; cout<<(x1>x2); return 0; }
该代码的输出就是1
。
把它放进大根堆中就是这样:
#include<iostream> #include<cstdio> #include<queue> using namespace std; struct node{ int a,b,c; bool operator<(const node& x) const{ return a<x.a; } }; priority_queue<node,vector<node>,less<node> > q;//大根堆 int main(){ node x1={1,2,3}; node x2={1,3,2}; node x3={2,3,1}; q.push(x1); q.push(x2); q.push(x3); while(!q.empty()){ printf("%d %d %d\n",q.top().a,q.top().b,q.top().c); q.pop(); } return 0; }
输出结果就是预想的:
2 3 1 1 3 2 1 2 3
所以,我们就可以写各种奇奇怪怪的算法啦
完结撒花