今天在写poj上的一道题时,提交之后显示代码运行超时,查了一下网上都说因为测试数据量大,普通循环查找很容易超时,用优先队列能解决问题,有时题目里设计到的状态信息比较复杂,要用一个类来维护,类的重载运算符自从上学期学过之后我就忘光了,于是现在写一篇博客好好记录一下:
C++中类的重载运算符
我们知道int可以比较,类和类之间只要通过重载运算符,也可以通过 >, <等方式来比较大小。
一般重载运算符有两种方式,我直接上代码,代码里面都有详细注释:
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
class Node{
public:
int a, b;
//这是重载运算符卸载类内部的写法,效果与外部一样,从小到大都是<。
//ps:第一行最后的const如果只用sort可以不加,用priority_queue的话
// 就要加上,还是养成习惯都加上吧
bool operator < (const Node & n) const{
return a > n.a;
}
};
//写在类声明的外部,如果是<,从小到大,如果是>,从大到小
/*
bool operator < (const Node &n1, const Node &n2){
return n1.a < n2.a;
}
*/
上面是两种重载运算符的方式,一种声明在内部,参数只需要写一个,另一个和普通函数一样声明的外面,所以比较的两个对象都需要写出来。
priority_queue优先队列
优先队列可以按照你给定的规则来维护一个队列,是que的升级版,如果是默认的数据类型,int等,默认的声明代表了从大到小维护数据,当然也可以从小到大维护,下面是代码:
p