关于C++中更改默认比较关系的总结

首先是更改STL容器里的默认排序:
比如:
在定义map的时候, 如果没有指定比较函数,那么采用默认的比较函数,即按键值由小到大的顺序插入元素。
一、值大小的比较
(1) 如果元素不是结构体,那么,可以编写比较函数。下面编写的比较规则按键值由大到小的顺序将元素插入到map。
//自定义比较函数myComp,重载"()"操作符
struct myComp { //返回true的话,那么a排前面。
bool operator() (const int &a, const int &b) {
if(a != b) return a > b;
else return a > b;
}
};
map<int, char, myComp> m;

(2) 如果元素是结构体,那么可以直接把比较函数写在结构体内(即定义该结构体的比较规则)。
struct Info {
string name;
float score;
//返回ture,则自身先排前面。
bool operator < (const Info &a) const {
//按socre由大到小排列。
return a.score < score;
}
};
map<Info, int> m;

二、优先级的比较
对于priority_queue优先队列容器,优先级的比较与之前的值比较恰好相反。

struct Info {
string name;
float score;
//返回false,则自身先排前面。
bool operator < (const Info &a) const {
//按socre由小到大排列,即score越小,优先级越大。
return a.score < score;
}
};
priority_queue<Info> m;

或者

struct myComp { //返回false的话,那么a排前面。
bool operator() (const int &a, const int &b) {
//由小到大排列
return a > b;
}
};
priority_queue<int, myComp> m;


有没有被这个一下子false,一下子true搞晕了呢。
其实很简单:
①值大小比较时,a的值比b小时,函数返回true(因为默认是从小到大排序的)。
②优先级比较时,a的优先级比b小时,函数返回true(因为默认是按优先级从大到小排的,所以true时a排后面,false时a排前面)。
(PS.如果感觉解释麻烦了,请ws..这段话)

 

 

三、最后,差点把sort给忘了。

sort 默认排序一维数组从小到大。

可以自定义比较函数。

用法如下:

 

 

当然,也可以直接定义在结构体中。上面讲过了,不赘述了。

 

参考资料:《算法竞赛入门经典》、《ACM程序设计》。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值