最近本蒟蒻做了一个实验,测试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