Bonjour à tous,
J'ai une classe nommée T qui contient comme champs :
- float F
- string S
et j'ai besoin d'écrire une fonction booléenne qui admet comme arguments un vector<T> v ainsi qu'un élément E1 de type T et qui informe si l'élément E1 possède un "frère jumeau" dans la liste v selon le sens suivant :
E1 possède un frère jumeau s'il existe trois éléments E2, E3, et E4 de v tels que E1.F=E2.F, E1.S=E3.S, E3.F=E4.F, E2.S=E4.S
J'ai écrit une fonction mais il s'avère que mon vecteur v est très grand et ma fonction prend beaucoup de temps à l'exécution (je fais trois boucles for sur v).
Voici la fonction :
Auriez vous des idées pour l'optimiser question temps ?
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
22
23 bool hasATwin(const T& E1, const vector<T>& v) { vector<T>::const_iterator it2 = v.begin(); vector<T>::const_iterator it3, it4; T E2, E3, E4; for(; it2 != v.end(); ++it2) { for(it3=it2+1; it3 != v.end(); ++it3) { for(it4 = v.begin(); it4 != v.end(); ++it4) { E2 = *it2; E3 = *it3; E4 = *it4; if(E1.F == E2.F && E1.S == E3.S && E3.F == E4.F && E2.S == E4.S()) return true; } } } return false; }
Bien cordialement.
Partager