1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| #include <cstdlib>
#include <iostream>
#include <queue>
#include <functional>
#include <ctime>
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
struct Comparator {
Comparator(){}
Comparator(const Comparator & c) { }
bool operator()(int a, int b) const { return a<b ; }
};
inline bool CompFct(int a, int b) {
return a < b;
}
int main(int argc, char** argv) {
const size_t SIZE = 1000000U; // 1 million
const size_t TESTS = 100U;
double timeA, timeB, timeC, dFreq;
LARGE_INTEGER begin, end, freq;
QueryPerformanceFrequency(&freq);
dFreq = (double)freq.QuadPart / 1000.0; // ms;
timeA = timeB = timeC = 0.0;
srand((unsigned int)time(NULL));
int *values = new int[SIZE];
for(size_t n=0; n<TESTS; ++n) {
std::vector<int> containerA(SIZE);
std::vector<int> containerB(SIZE);
std::vector<int> containerC(SIZE);
Comparator compA;
std::priority_queue<int, std::vector<int>, Comparator> queueA(compA, containerA);
std::priority_queue<int, std::vector<int>, std::function<bool(int, int)>> queueB(CompFct, containerB);
std::priority_queue<int, std::vector<int>, bool(*)(int, int)> queueC(CompFct, containerC);
for(size_t i=0; i<SIZE; ++i) {
values[i] = rand();
}
QueryPerformanceCounter(&begin);
for(size_t i=0; i<SIZE; ++i) {
queueA.push(values[i]);
}
QueryPerformanceCounter(&end);
timeA += (end.QuadPart - begin.QuadPart) / dFreq;
QueryPerformanceCounter(&begin);
for(size_t i=0; i<SIZE; ++i) {
queueB.push(values[i]);
}
QueryPerformanceCounter(&end);
timeB += (end.QuadPart - begin.QuadPart) / dFreq;
QueryPerformanceCounter(&begin);
for(size_t i=0; i<SIZE; ++i) {
queueC.push(values[i]);
}
QueryPerformanceCounter(&end);
timeC += (end.QuadPart - begin.QuadPart) / dFreq;
}
timeA /= (double)TESTS;
timeB /= (double)TESTS;
timeC /= (double)TESTS;
std::cout << "temps d'insertion de " << SIZE << " random elements, moyenne de " << TESTS << " tests\n"
<< "foncteur: " << timeA << "ms\n"
<< "std::function: " << timeB << "ms\n"
<< "fonction libre: " << timeC << "ms\n";
delete values;
return EXIT_SUCCESS ;
} |
Partager