由于经常忘记如何重载运算符,所以有了这篇文章
重载运算符的语句如下:返回类型 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
所以,我们就可以写各种奇奇怪怪的算法啦
完结撒花