关于C++ STL sort函数中的cmp

前言

今天在刷leetcode题目的时候使用STL中的sort函数,传入的不同cmp导致性能出现偏差,分析了原因之后记录一下

STL的sort函数

  1. STL的sort函数在头文件中
  2. 数据量大的时候使用Quick Sort,分段递归排序。一旦分段后的数据量小于某个门槛,为了避免Quick Sort的递归调用带来过大的额外负荷,改用Insertion Sort,递归层次过深,还会改用Heap Sort
  3. 使用
    1. sort(first, last, cmp)
    2. 前两个参数传入排序数组的起始和结束位置,第三个参数可选,默认升序排序

传入cmp不同导致的性能差距

1. 传入函数指针
	bool cmp(T& u, T&v) {//函数逻辑}
	sort(T& first, T& last, cmp);
2. 传入lambda表达式
	sort(T& first, T& last, [](T&u, T&v){//函数逻辑});
3. 传入函数对象
	struct cmp{
		bool operator(const T& u, T& v) {
		//函数逻辑
		}
	};
	sort(T& first, T& last, cmp());

函数对象和lambda表达式速度基本一致,而函数指针比这两者慢了不少
原因是在函数对象中编译器可以实现内联调用,从而提升性能。
而对于lambda表达式,编译器实际上将lambda表达式转化为一个函数对象处理,所以使用lambda表达式和函数对象一样快

还有一点,传入参数使用引用比传入本身快,引用底层实现实际是指针,传输速度远小于对象赋值和拷贝的时间
当然如果传输数值而非对象那么可以不必如此
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值