IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Question sur le Sort


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 35
    Points : 25
    Points
    25
    Par défaut Question sur le Sort
    bonjour,

    j'ai une question sur le tri des valeur dans n vecteur;
    Si j'ai 3 vecteurs V1,V2, et V3, pour les trier je sais qu'on peut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sort(v.begin(); v.end()
    mais ma question est :
    Est ce qu'il y a une methode qui me permet de trier les valeurs d'un vecteur et au même temps les valeurs des deux autres vecteur suivront la position des éléments triés de V1, pour bien illustrer ma question voici un petit exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    V1[5,2,8,4,3], v2[C1,C2,C3,C4,C5], V3[0.2,0.4,0.25,0.15,0.6]
    Je voudrai obtenir ceci:
    V1[2,3,4,5,8], v2[C2,C5,C4,C1,C3], V3[0.4,0.6,0.15,0.2,0.25]
    Merci d'avance pour vos suggestions

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Je pense que tu as plus un problème sur le choix du conteneur qu'autre chose.

    Si je comprends bien, chaque élément d'un vecteur est associé de deux autres éléments appartenant chacun aux deux autres vecteurs.

    Dans ce cas là pourquoi ne pas utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::map< Type1 clé, std::pair< Type2 x, Type3 y> >
    ?

  3. #3
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    boost.multi_index ne remplit pas ce rôle ?
    Sinon, je trierai un vecteur, temporaire, d'indices selon le prédicat qui compare les valeurs pointées par les indices dans V1.
    Autre solution: un vecteur de structures qui contient les 3 champs.

    Mais certainement pas une map pour trier des trucs légers.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    Merci pour vos suggestions,

    d'après ce que j'ai comprit, les maps sont utilisées pour trier un grand nombre de données, et c'est mon cas puisque j'ai une centaine de milliers de données.
    Alors je vais préparer quelque chose en utilisant "map".

    merci

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Sauf que les maps coutent extrêmement cher.
    Surtout comparé à un vecteur d'int à trier une seule fois.
    Par contre, elles peuvent plus simple à utiliser.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    je pense que tu te trompes dans les termes.
    On ne parle pas de tri dans ton cas, seul le premier vecteur a ses données triées, les autres ont juste leur contenus réagencés selon le contenu du premier. Et là il s'agit d'un simple swap de position.
    Et un tel comportement n'est absolument pas standard ni général, donc il te faut le mettre en place toi-même.
    Dans tous les cas aucune fonction magique ne fera un tel traitement pour toi.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Salut

    Le sujet a déjà été discuté ici. Moi à la place de nadir CoCo, je remettrais en question le choix de ma structure de données et je ferais un truc simpliste du genre :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
     
    struct Donnees
    {
      int m_1;
      std::string m_2;
      float m_3;
     
      Donnees() : m_1(0), m_3(0.f) {}
      Donnees(int iM1, std::string const & iM2, float iM3) : m_1(iM1), m_2(iM2), m_3(iM3) {}
     
      bool operator < (const Donnees &iData) const
      {
        return m_1 < iData.m_1;
      }
    };
     
    int main(int argc, char* argv[])
    { 
      std::vector<Donnees> vect;
      vect.push_back(Donnees(5,"C1",0.2f));
      vect.push_back(Donnees(2,"C2",0.4f));
      vect.push_back(Donnees(8,"C3",0.25f));
      vect.push_back(Donnees(4,"C4",0.15f));
      vect.push_back(Donnees(3,"C5",0.6f));
     
      std::sort(vect.begin(), vect.end());
     
      for(std::vector<Donnees>::iterator it = vect.begin(); it != vect.end(); it++)
        std::cout << "(" << it->m_1 << "," << it->m_2 << "," << it->m_3 << ")" << std::endl;
     
      return 0;
    }
    Mais bon sa base de code ne le permet peut être pas.
    Find me on github

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    Merci pour votre aide, je suis pas encore arrivé à faire ce que je veux mais ça se clarifie de plus en plus.

Discussions similaires

  1. Question sur la fonction SORT + UTF-8
    Par vinousenpai dans le forum Langage
    Réponses: 7
    Dernier message: 05/10/2010, 12h17
  2. Question sur la proc sort
    Par stefsas dans le forum SAS Base
    Réponses: 2
    Dernier message: 10/06/2008, 15h29
  3. Petite question sur la façon de faire une sorte de thread
    Par bit_o dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 09/05/2007, 23h28
  4. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo