1.结构体内嵌比较函数的规则
如下:
struct node
{
int l,r;
bool operator <(const node &a)const{
return r < a.r;
}
};
此时左边那个r表示自己这个r,如果排序的话,会按r值从小到大排序,因为sort默认就是从小到大的。
而优先队列就不同了,优先队列中默认是大值优先,所以大小关系相反,比如下面这个:
struct SELL
{
int price,num;
bool operator <(const SELL &a)const
{
return price>a.price;
}
};
priority_queue<SELL> que;
那么这个优先队列是按price小的优先出队。
总之记住:结构体中直接写比较函数一定是左边那个裸的r表示当前this值,如果r<a.r,那么就是从小到大排序,而优先队列恰恰相反 就行了。
.排序vector结构体最好内嵌比较函数
比如内嵌:
bool operator<(const node &B)const { return r<B.r; }
时 sort(v.begin(),v.end()) 比 sort(v.begin(),v.end(),cmp) 快。 而且是超时的点。 注意!、
重载运算符的格式如下:
bool operator 运算符 (const 结构体名称 b) const
{
return(什么时候这个运算符对结构体成立);//注意对此运算符使用this->元素名;
return(什么时候这个运算符对结构体成立);//注意对此运算符使用this->元素名;
}