Bonjour,
j'ai tenté de comparer les performances d'algorithmes basés sur l'utilisation de template.
J'ai voulu comparer le temps de calcul basés sur de prog différents qui font la même chose: on a un vecteur de paire<int,int> aléatoires. Le but est de compter le nombres de paires dont la première coordonnées est inférieur à 10. Ce vecteur contient 1000000 paires.

Le premier utilise les templates de la STL:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
for(int od=0;od<10;od++)
	{
	time_t start,end;
	double dif;
	int o=0;
	time (&start);
for(int r=1;r<5;r++){
 
	std::vector<pair<int,int>> VN;
	fff(VN);// Cette fonction génère le vecteur aléatoire. 
o=o+ count_if(VN.begin(), VN.end(),bind(tr1::cref(bind1st(less<int>(), 10))  ,(std::bind<int&>(std::get<0, int , int>, _1))));
 
}	 
 
}
 
	time (&end);
    dif = difftime (end,start);
	fffd=fffd+dif;
}

Le deuxième utilise une bonne vieille boucle if et for:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
for(int od=0;od<10;od++)
	{
	time_t start,end;
	double dif;
	int o=0;
	time (&start);
for(int r=1;r<5;r++){
 
	std::vector<pair<int,int>> VN;
	fff(VN);// Cette fonction génère le vecteur aléatoire. 
 for(iterator k=VN.begin();k!=VN.end();k++){
if((*k).first<10) o=o+1;
}	 
 
}
 
	time (&end);
    dif = difftime (end,start);
	fffd=fffd+dif;
}
Hé bien malgré l'utilisation de ces templates, la boucle for-if reste supérieure en performances, puisque fffd dans le premier cas vaut 160, alors que dans le deuxième il faut 140.
Je pense que c'est l'utilisation des 3 bind qui fait que cela ralenti le calcul.
Je ne suis pas assez calé pour améliorer mon code, mais si vous avez des idées.