C++重载运算符

由于经常忘记如何重载运算符,所以有了这篇文章
重载运算符的语句如下:
返回类型 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

所以,我们就可以写各种奇奇怪怪的算法啦
完结撒花

上一篇:liunx学习(一):linux下目录操作大全


下一篇:STL:函数对象(仿函数)的概念