Bonjour
dans mon programme j'utilise initialement une map de type<Material*,Cell> et j'ai une fonction num suivante:
En analysant avec callgrind les fonctions qui prennent le plus de temps je me rend compte que c celle-ci qui est appeler bcp de fois et qui prend bcp de temps.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 int num(Material *matl) { map<Material *,Cells>::iterator p = mat_.find(matl); if (p != mat_.end()) { return (p->second).num; } else { return (int)0; } }
Etant donner que la taille de la map ne depasse pas 5. Je me dis que construire l'iterateur est ce qui prend du temps.
Du coup je pense a une alternative qui est de stoker directement les valeurs num dans un vecteur de taille 5 et d'y acceder directement genre:
cette modification entraine bcp de changements lourds.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 int num2(Material *matl) { int ind=matl->id(); if (ind < nbmat_) { return mat2_[ind]; } else { cout <<"Attention ca a depasser la taille de mat2_"<<endl; return 0; } }
C'est pourquoi avant je voudrais savoir si vouss pensez qu'une telle modification peut reellement etre benefique pour accelerer le programme.
Merci
Cordialement
jeanne
Partager