| 12
 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