以下内容都是个人见解,若有错误,还望指正!!
最近刚学习了C++中有关重载运算负中的知识,总算明白了如何通过重载一些运算符来改变一些容器的排序顺序 如 priority_queue优先队列的优先顺序和 sort 函数的二级排序,在不写比较函数的情况下如何通过重载运算负实现(如果对一个类有多个操作,sort建议还是用比较函数比较好)
//一般比较函数的写法
struct Node{
int a;
int b;
};
bool compare(const Node x,const Node y){//按 a 的升序排列,如果a相等按 b 的升序;
if(x.a == b.a)
return x.b < y.b;
return x.a < y.a;
}
sort(arr,arr+n,compare);
这里我们对 < 符合做了重载,因为在一般的排序比较函数中默认的都是使用 < 符合来排序和比较的
//重载的两种写法
struct Node{
int a;
int b;
friend bool operator< (const Node& x,const Node& y)//友元函数的写法,这里的变量有2个,和比较函数比较相似好理解
{
if(y.a == x.a)
return x.b < y.b;
return x.a > y.a;
}
};
struct Node{
int a;
int b;
bool operator< (const Node& y)const//这里就应用到一些运算符重载的知识,不是一两句话能说清楚的,不懂的