Je cherche a ranger dans l'ordre (alphabétique et/ou numerique) le contenu de 2 [Résolu]

Signaler
Messages postés
557
Date d'inscription
dimanche 25 septembre 2005
Statut
Membre
Dernière intervention
10 mai 2014
-
Messages postés
557
Date d'inscription
dimanche 25 septembre 2005
Statut
Membre
Dernière intervention
10 mai 2014
-
Salut,
Je cherche a ranger dans l'ordre (alphabétique et/ou numerique) le contenu de 2 vector selon l'un d'eux.
Je m'explique, je possède deux vector :

vector <




int
> occurences;vector <


char
> caracteres;
Ces 2 vectors marchent parallelement et necessites donc d'être classé dans le même ordre. Je voudrais ranger le vector occurences du plus petit au plus grand tout en classant de la même manière le second vector. Ce qui signifie que pour occurences[i] d'avant et d'après la manoeuvre, caractères[i] est le même.

J'espere que vous aurez compris ma question et que vous pourrez y répondre.
Merci d'avance.

A+

PS.:Je programme en console et non en Api win 32.

Nico

1 réponse

Messages postés
557
Date d'inscription
dimanche 25 septembre 2005
Statut
Membre
Dernière intervention
10 mai 2014
2
Bonjour,


J'ai réussi à trouver une technique me permettant de trier ces deux listes parallement cette technique est executée par la fonction suivante mais necessite obligatoirement que int_ancien et int_nouveau aient les même valeurs et la même taille, il est également necessaire que char_nouveau ne contienne aucune valeur :







<hr />



void trier_deux_listes_parallelement(vector int_ancien,
          vector &int_nouveau,
          vector <char> char_ancien,
          vector <char> &char_nouveau){
           //ATTENTION,
           //Cette fonction necessite que int_ancien et int_nouveau soit identiques
           sort(int_nouveau.begin(),int_nouveau.end());
           for(int i(0);i!=int_nouveau.size();++i) {
            char temp;
            for(int j(0);j!=int_ancien.size();++j) {
             char temp_bis;
             if(int_ancien[j]==int_nouveau[i]) temp_bis=char_ancien[j];
             int deja(-1);
             for(int w(0);w!=char_nouveau.size();++w)
              if(char_nouveau[w]==temp_bis) deja=1;
             if(deja==-1) temp=temp_bis;
            }
            char_nouveau.push_back(temp);
           }
}

<hr />
J'ai utilisé cette fonction dans mon programme et elle semble fonctionné correctemment.
Merci et à bientôt.

Nico