#include<bits/stdc++.h>
using namespace std;
#define _for(i,a,b) for( int i=(a); i<(b); ++i)
const int N = 10000000;
struct TS{
int a, b, c;
};
inline bool cmp (const TS& tl, const TS& t2) {
if(tl.a != t2.a) return tl.a < t2.a;
if(tl.b != t2.b) return tl.b < t2.b;
return tl.c <= t2.c;
}
int cmp4qsort(const void* x, const void* y) {
TS* a = (TS*)x, * b = (TS*)y;
if (a->a != b->a) return a->a - b->a;
if (a->b != b->b)return a->b - b->b;
return a->c - b->c;
}
struct cmpFunctor {
inline bool operator() (const TS& tl, const TS& t2) {
if(tl.a != t2.a) return tl.a < t2.a;
if(tl.b != t2.b) return tl.b < t2.b;
return tl.c <= t2.c;
}
};
TS tss[N];
void genData () {
_for(i, 0, N) {
tss[i].a = rand();
tss[i].b = rand();
tss[i].c = rand();
}
}
int main(){
srand(time (NULL));
genData () ;
clock_t start = clock();
sort(tss, tss+N, cmp);
printf("sort by funtion pointer : %ld\n", clock() - start);
genData();
start = clock();
sort(tss, tss+N, cmpFunctor());
printf("sort by functor : %ld\n", clock() - start);
genData ();
start = clock();
qsort(tss, N, sizeof (TS), cmp4qsort);
printf("qsort by funtion pointer : %ld\n", clock() - start);
genData ();
start = clock();
sort(tss, tss+N,[](const TS& tl, const TS& t2) {
if(tl.a != t2.a) return tl.a < t2.a;
if(tl.b != t2.b) return tl.b < t2.b;
return tl.c <= t2.c;
});
printf("sort by lambda pointer : %ld\n", clock() - start);
}
05-16
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交