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

SL & STL C++ Discussion :

[STL]std::map<std::string, structure> Parcour...


Sujet :

SL & STL C++

  1. #1
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut [STL]std::map<std::string, structure> Parcour...
    Bonjour,
    J'ai un problème avec le conteneur std::map. Il fonctione parfaitement, mais j'ai l'impréssion qu'il "classe" les données, dans l'ordre alphanumérique du premier type (std::string dans mon cas). C'est enbètent car je doit parcourir la map avec un for et j'ai besoin de retrouver mes donbnées dnas l'ordre ou elles ont été ajouter.
    Peut on enpècher le tri réaliser par std::map? Faut'il utiliser un autre conteneur, et dans ce cas le quel pour garder la possibilitée d'assosier deux element (Toujours pouvoir utiliser MaMap[Chaine] = Valeur) ?
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut Re: [STL]std::map<std::string, structure> Parcour...
    Citation Envoyé par JC_Master
    Bonjour,
    J'ai un problème avec le conteneur std::map. Il fonctione parfaitement, mais j'ai l'impréssion qu'il "classe" les données, dans l'ordre alphanumérique du premier type (std::string dans mon cas). C'est enbètent car je doit parcourir la map avec un for et j'ai besoin de retrouver mes donbnées dnas l'ordre ou elles ont été ajouter.
    Peut on enpècher le tri réaliser par std::map?
    Non. C'est ce tri qui permet à la map d'avoir de bonnes performances d'accès.

    Citation Envoyé par JC_Master
    Faut'il utiliser un autre conteneur, et dans ce cas le quel pour garder la possibilitée d'assosier deux element (Toujours pouvoir utiliser MaMap[Chaine] = Valeur) ?
    Les conteneurs de la SL qui conservent l'ordre (aussi nommés séquence), sont vector, list et deque. Aucun n'est associatif.

    Solutions : Gérer deux conteneurs en parallèle, ou utiliser boost::multi_index qui automatise un peu cette gestion (mais demande de comprendre la doc), et permet d'aller encore plus loin.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    Par défaut
    Le map trie systématiquement.

    Ce que tu peux faire, c'est ajouter à la clé de chaque donnée un champ numéro que tu incrémentes lorsque tu les ajoutes à la liste, et redéfnir le critère de tri...
    Ah non, tu ne pourrais plus retrouver directement la clé...

    Ou bien, utiliser un autre conteneur que map. Mais si tu utilises map, je suppose que le for n'est pas ta seule façon d'y accéder...


    Ou bien, voilà: Un vector ou double-ended queue pour les données, une map qui associe l'index de la donnée à la clé...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    J'ai utilisé sous linux les gnu_cxx::hash_map qui conserve l'ordre et qui m'ont eu l'air plus performants au niveau de la récupération de valeur à partir d'une clef (test de deux programme identique seul le conteneur changeait).
    Ils est disponible avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include <ext/hash_map>
    .

    Ce fichier est il présent sur un grand nombre de plateforme?
    Si ce le cas il peut être une alternative au problème posé ici, sans réduire la portabilité du programme.

  5. #5
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    e ne sais pas si il fait aprti de la lib standart. Je préfère n'utiliser que ce qui se trouve dans la lib standart, et donc comme boost n'en fait pas encore parti, je vais devoir faire autrement.
    La solution d'utiliser un foncteur de trie qui se base sur l'ordre d'ajout des données est possible.
    J'ai une assosiation de std::stirng et d'une struc, structure que je peut modifier.
    Il faudrais donc rajouter a cette structure un champ ID, utiliser pour le trie.
    Il faudrais aussi que je conserve la plus grande valeur... Ou est'il possible de compter le nombre d'élément dans la map?(Je pensse que oui).
    Biensur, si je procède insi, je ne peut plus insèrer au milieu de ma map un nouvelle element, mais ce n'est pas un problème.
    Je vais tenter d'implémenter sa.
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  6. #6
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    Comment je dit a mon std::map que je veut que mon foncteur de trie recoivent le deuxième element(la valeur) et non la clef?

    Edit : Aparament, d'après ce que j'ai lut, on peut pas... Pour le momment je vais utiliser un std::list en plus du map, qui contiendra les clefs dans le bonne ordre.
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

Discussions similaires

  1. Réponses: 9
    Dernier message: 17/09/2013, 11h59
  2. [STL std::map] element precedant
    Par ZaaN dans le forum SL & STL
    Réponses: 1
    Dernier message: 17/05/2007, 00h52
  3. [STL] accès au donnée de std::map
    Par dug dans le forum SL & STL
    Réponses: 7
    Dernier message: 24/01/2007, 15h03
  4. Trier un std::map selon les valeurs plutot que les clés
    Par dj.motte dans le forum SL & STL
    Réponses: 2
    Dernier message: 13/11/2004, 21h54

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