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

Langage C++ Discussion :

Utilisation du Container std::map


Sujet :

Langage C++

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 62
    Par défaut Utilisation du Container std::map
    Bonjour,

    Je vous expose mon problème simple.

    J'ai un container de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::map<int,std::map<int,double> >list;

    La difficulté que j'ai est que je n'arrive pas à initiliaser ma variable.En gros voici le shéma de ma liste :

    CATEGORIE[1]->test[1]->valeur
    ->test[2]->valeur
    ->test[3]->valeur
    ...
    CATEGORIE[2]->test[4]->valeur
    ->test[2]->valeur
    ->test[3]->valeur

    etc.

    Pour des raisons propres à mon application, je préfère passer par les containers. Je voulais donc juste savoir comment initiliaser/remplir les valeurs de ma liste.


    Merci d'avance pour vos réponses.

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    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 032
    Billets dans le blog
    12
    Par défaut
    2 méthodes
    la simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    list[1][1] = valeur;
    list[1][2] = valeur;
    list[1][3] = valeur;
    list[2][4] = valeur;
    list[2][2] = valeur;
    list[2][3] = valeur;
    la complexe si tu préfères maitriser toi même :
    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
    // Tout d'abord on regarde si l'index 1 existe dans list (pour avoir list[1]
    // pour ça on récupère un iterateur sur cet index
    std::map<int,std::map<int,double> >::iterator l_it1 = list.find( 1);
     
    if (l_it1 == list.end())
    {
       // l'index 1 n'existe pas, donc on l'ajoute et on fait pointer l'iterateur vers cet index
       list.insert( std::pair<int, std::map<int,double> >( 1, std::map<int,double>()));
       l_it1 = list.find( 1);
    }
     
    // maintenant on cherche l'index 1 dans list[1]
    // même méthode, on initialise un itérateur pointant sur cet index
    std::map<int,double>::iterator l_it2 = l_it1->second.find( 1);
     
    if (l_it2 == l_it1->second.end())
    {
       // l'index 1 n'existe pas dans list[1], on le crée en lui assignant la valeur
       l_it1->second.insert( std::pair<int, double>( 1, valeur);
    }
    else
    {
       // l'index 1 existe déjà, on lui assigne juste la valeur
       l_it2->second = valeur;
    }
     
    // à ce stade on a donc list[1][1] = valeur.
    // il faut donc reproduire ce code pour toutes les valeurs à initialiser...
    ...
    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).

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 62
    Par défaut
    Est ce que tu pourrais un peu commenter ton code, afin que je puisse mieux comprendre et me débrouiller seule par la suite? merci

  4. #4
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    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 032
    Billets dans le blog
    12
    Par défaut
    C'est pourtant clair !!
    le code est maintenant commenté (je n'ai pas commenté la première partie, qui coule de source je pense.)
    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).

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 62
    Par défaut
    C'est peut-être clair pour toi mais pas pour moi... en tout cas merci beaucoup pour ton aide, voici ce que j'ai codé :

    Avec temp[0]=categorie;temp[1]=test;temp[0]=valeur;


    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
    std::map<int,std::map<int,double> >::iterator l_it1 = sprrlist.find(temp[0]);
    if (l_it1 == sprrlist.end())
    {
    sprrlist.insert( std::pair<int, std::map<int,double> >( temp[0],std::map<int,double>()));
    l_it1 = sprrlist.find( temp[0]);
    }
     
    std::map<int,double>::iterator l_it2 = l_it1->second.find(temp[1]);
    if (l_it2 == l_it1->second.end())
    {
    l_it1->second.insert( std::pair<int, double>(temp[1], temp[2]));
    }
    else
    {
    l_it2->second = temp[2];
    }
    Tu me diras si j'ai bien saisi

  6. #6
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    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 032
    Billets dans le blog
    12
    Par défaut
    C'est correct ^^
    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).

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 62
    Par défaut
    Par contre, j'essai d'afficher mes valeurs pour un debuggage. Par exemple si je voulais juste afficher les valeurs des tests d'une catégories, comment je doit faire.

    Je doit dire qu'après plusieurs essaies, je n'ai que des erreurs de compilation. J'ai vraiment du mal à saisir les notions des conteneurs et itérateurs...

  8. #8
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    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 032
    Billets dans le blog
    12
    Par défaut
    Je te conseille de lire la FAQ afin d'avoir un meilleur aperçu de comment utiliser les conteneurs STL : http://cpp.developpez.com/faq/cpp/?p...#STL_container
    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).

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2011
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 62
    Par défaut
    Merci, mais j'avais déjà lu cette partie de la FaQ...

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

Discussions similaires

  1. utilisation des std::map
    Par guillaume16 dans le forum SL & STL
    Réponses: 9
    Dernier message: 25/07/2006, 16h56
  2. std::map<int,CStringArray> ????
    Par philippe V dans le forum MFC
    Réponses: 1
    Dernier message: 12/10/2005, 06h48
  3. comment utiliser le CONTAINS ???
    Par zarbiman dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/10/2005, 18h33
  4. Libérer des pointeurs dans une std::map
    Par GaldorSP dans le forum SL & STL
    Réponses: 2
    Dernier message: 09/07/2005, 14h42
  5. 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