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 :

maps imbriquées...


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    sas
    sas est déconnecté
    Membre émérite

    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 54
    Par défaut maps imbriquées...
    bonjour,

    j'ai une classe qui symbolise le tri par catégorie et sous-catégories d'éléments diverses. Elle est basée
    sur le conteneur std::map. je n'arrive pas à insérer des éléments dans la map des sous-catégories (problèmes de syntaxe, crash... je sais pas trop)

    déclaration de ma classe :

    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
     
    class CTri
    {
    public:
     
        CTri();
       ~CTri();
     
        void add(const cstd::cString& categorie);
        void add(const cstd::cString& categorie, const cstd::cString& sous_categorie);
     
        // ...
     
    private:
     
        std::map<cstd::cString, cstd::cTypes::DWORD> _M_categorie_map;
        std::map<cstd::cTypes::DWORD, std::map<cstd::cString, cstd::cTypes::DWORD> > _M_sous_categorie_map;
     
    };
    les définitions :

    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
     
    typedef std::map<cstd::cString, cstd::cTypes::DWORD>::const_iterator categorie_map_const_iterator;
    typedef std::map<cstd::cTypes::DWORD, std::map<cstd::cString, cstd::cTypes::DWORD> >::const_iterator sous_categorie_map_const_iterator;
     
    void
    CTri::add(const cString& categorie) // ok ça fonctionne
    {    
        if (_M_categorie_map.find(categorie) == _M_categorie_map.end())
        {
            _M_last_index_categorie++;
            _M_categorie_map[categorie] = _M_last_index_categorie;
        }
    }
     
    void
    CTri::add(const cstd::cString& categorie, const cstd::cString& sous_categorie)
    {
        categorie_map_const_iterator it_categorie;
        sous_categorie_map_const_iterator it_sous_categorie;
        cTypes::DWORD last_index_sous_categorie = 0;
        map<cString, cTypes::DWORD> m;
     
        add(categorie);
        it_categorie = _M_categorie_map.find(categorie);
        last_index_sous_categorie = getIndexMaxSousCategorie((*it_categorie).second);
     
        it_sous_categorie = _M_sous_categorie_map.find((*it_categorie).second);
        last_index_sous_categorie++;
     
         // première méthode:
         // (*it_sous_categorie).second[sous_categorie] = last_index_sous_categorie; <- le compilo il aime pas
     
         // deuxième méthode : 
         m = (*it_sous_categorie).second;						 <-au deuxième appel j'ai une violation d'accès
         m[sous_categorie] = last_index_sous_categorie;
    }
    je ne vois pas pourquoi ça crash...et si je pouvais me débarraser de 'map<cString, cTypes:WORD> m' ça serait mieux.
    si qqn pouvait m'expliquer ce qui se passe (ou se passe pas)...merci

  2. #2
    sas
    sas est déconnecté
    Membre émérite

    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 54
    Par défaut
    oups, autant pour moi j'avais oublié un petit truc....
    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
     
    void
    CTri::add(const cstd::cString& categorie, const cstd::cString& sous_categorie)
    {
        categorie_map_const_iterator it_categorie;
        sous_categorie_map_const_iterator it_sous_categorie;
        cTypes::DWORD last_index_sous_categorie = 0;
        map<cString, cTypes::DWORD> m;
     
        add(categorie);
        it_categorie = _M_categorie_map.find(categorie);
        last_index_sous_categorie = getIndexMaxSousCategorie((*it_categorie).second);
     
        it_sous_categorie = _M_sous_categorie_map.find((*it_categorie).second);
        if (it_sous_categorie == _M_sous_categorie_map.end()) 
        {
            last_index_sous_categorie++;
            m[sous_categorie] = last_index_sous_categorie;
            _M_sous_categorie_map[(*it_categorie).second] = m;   // < - sans ça c'était normal le crash
     
        }    
    }

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/08/2014, 00h25
  2. Boucle imbriquée avec 2 maps
    Par identifiant_bidon dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 03/07/2010, 23h34
  3. Pb requête imbriquée
    Par ddams dans le forum Requêtes
    Réponses: 11
    Dernier message: 20/04/2004, 12h13
  4. Requête imbriquée et indexes INTERBASE
    Par vadim dans le forum InterBase
    Réponses: 2
    Dernier message: 06/09/2002, 16h15
  5. Editeur de MAP en delphi pour jeux directX
    Par PetitScorpion dans le forum DirectX
    Réponses: 5
    Dernier message: 09/07/2002, 18h47

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