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

Résolu
ndubien Messages postés 557 Date d'inscription dimanche 25 septembre 2005 Statut Membre Dernière intervention 10 mai 2014 - 18 févr. 2007 à 14:39
ndubien Messages postés 557 Date d'inscription dimanche 25 septembre 2005 Statut Membre Dernière intervention 10 mai 2014 - 19 févr. 2007 à 12:11
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

ndubien Messages postés 557 Date d'inscription dimanche 25 septembre 2005 Statut Membre Dernière intervention 10 mai 2014 4
19 févr. 2007 à 12:11
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
3
Rejoignez-nous