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 : 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;
}
Auriez vous des idées pour l'optimiser question temps ?

Bien cordialement.