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 :

vector<map<string, string> >::iterator ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Par défaut vector<map<string, string> >::iterator ?
    Bonjour à tous

    J'essaie d'itérer sur un container de type vector<map<string, string> >::iterator et je n'y arrive pas. Voila ce que j'essaie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(vector<map<string, string> >::iterator itx = vmx.begin(); itx != vmx.end(); ++itx)
    cout << itx->first << " " << itx->second << endl;
    Mais le compilateur me dit que first et second n'existent pas... Je souhaiterais accéder aux clés et valeur de chaque map, en parcourant le vector.

    Auriez-vous une idée ?

    Merci d'avance

  2. #2
    Membre très actif Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Par défaut
    te faut pas simplement des () devant first et second ?!

  3. #3
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    itx est une itérateur de vector, et pas de map, donc effectivement first et second n'existent pas. Pour accéder à la valeur pointée par l'itérateur, tu fais comme ceici : ( * itx).
    Là tu auras une map<string, string>. Il te faut donc créer une nouvelle boucle pour accéder à chaque couple de valeurs de chaque map :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for (vector< map<string, string> >::iterator itx = vmx.begin() ; itx != vmx.end() ; ++itx)
    {
    	for (map<string, string>::iterator it = ( * itx).begin() ; it != ( * itx).end() ; ++it)
    	{
    		cout << it->first << " " << it->second << endl;
    	}
    }
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour Scheme

    itx n'est pas un iterateur sur une map mais sur un vecteur !
    Utilise des typedef pour rendre le code plus lisible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    typedef std::map<string, string> Map;
    typedef Map::iterator MapIterator;
    typedef std::vector<Map> Vector;
    typedef Vector::iterator VectorIterator;
     
    Vector vmx;
    for(VectorIterator itx = vmx.begin(); itx != vmx.end(); ++itx)
    {
        Map& une_map = *itx;
        MapIterator it_map = une_map.begin(); 
        cout << it_map->first << " " << it_map->second << endl;
    }
    EDIT : pris de court par dragonjoker59

  5. #5
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Utilise des typedef pour rendre le code plus lisible
    Je suis d'accord, parce que tout de même, "vector< map<string, string> >::iterator" c'est moche...
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  6. #6
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    Je suis d'accord, parce que tout de même, "vector< map<string, string> >::iterator" c'est moche...
    Peut-être parce que vector<map<string,string> > c'est déjà moche à la base

    N'y-a-t-il pas une autre manière de faire ? Parce que la copie (en cas de copie) est quand même extrêmement lourde...

    Et au niveau architecture, j'ai du mal à voir l'intérêt d'une telle collection étrange...
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Par défaut
    Merci à vous deux

    En fait j'utilise un parser de xml qui renvoie cette fameuse collection que je trouve aussi très lourde. Je n'ai pas le choix :s

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Par défaut
    Ce n'est pas évident du tout d'utiliser cette collection...

    Je n'arrive pas à accéder à un élement donné d'une map par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(vector<map<string, string> >::iterator itx = vmx.begin(); itx != vmx.end(); ++itx) {
    	cout << itx->find("name") << endl;
    }
    Ce code ne fonctionne pas, je suis obligé d'utiliser un iterator sur la map en plus de celui du vector pour arriver à faire ce que je veux ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. System.getenv() et interface Map<String, String>
    Par Elisia dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 23/01/2014, 12h58
  2. Map<String, String> static et accents
    Par zaboug dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 01/08/2011, 10h11
  3. Recuperation d'un map <string,string> au lieu d'un list
    Par sallemel dans le forum Hibernate
    Réponses: 2
    Dernier message: 25/02/2011, 00h56
  4. @CollectionOfElements Map<String, String>
    Par Hammer dans le forum Hibernate
    Réponses: 1
    Dernier message: 15/04/2010, 20h27
  5. Vector de structure contenant des string
    Par Nicolas Bauland dans le forum C++
    Réponses: 9
    Dernier message: 04/02/2010, 12h47

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