sort函数的效率

博主通过实验比较了C++中sort函数使用重载运算符、传入函数指针和传入仿函数三种方式的效率,发现在Windows10系统下(未开启-O2优化),传入函数指针的方式最慢,而重载运算符和functor效率接近。对于大规模数据,functor稍快,但对于小规模数据差异可忽略。建议仅需一种排序规则时使用重载运算符,否则选择functor。
摘要由CSDN通过智能技术生成

最近本蒟蒻做了一个实验,测试sort的效率。

我使用WIndows10(没开-O2)系统试验了三种排序方法:重载运算符,传入函数指针以及传入仿函数。

如果您按照我的测试程序测出来时间效率差距较大,请在评论区留言并说明操作系统和测试结果。

以下n表示给多少个数据排序,对于每个n都测了三次:(单位:ms)

n 重载运算符 函数 仿函数
500000 80 140 80
500000 80 124 80
500000 80 139 80
1000000 172 271 164
1000000 182 279 174
1000000 180 372 170
5000000 950 1505 964
5000000 969 1514 966
5000000 966 1570 970
10000000 1994 3126 2007
10000000 2005 3140 2051
10000000 2007 3155 2015

绿书上的数据(n=10000000):
functor:6324
function:36372

当然我不知道作者用的什么系统,反正比我慢就对了

可以看到,传入一个函数进行排序是最慢的,而重载运算符和functor速度基本一样,不过对于n小的数据基本上都是functor快几毫秒,完全可以忽略不计,如果只按照一种规则排序推荐使用重载运算符,多种规则那也只能functor了

最后给出测试代码:

#include <cstdio>
#include <algorithm>
#include <ctime>

using namespace std;

struct nodgd {
   
	int x, y, z;
	inline nodgd operator = (const nodgd a)
	{
   
		x = a.x; y = a.y; z = a.z;
		return a
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值