Une histoire de ressemblance
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 :
Code:
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;
} |
Auriez vous des idées pour l'optimiser question temps ?
Bien cordialement.