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 :

incompréhension avec les map


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 111
    Par défaut incompréhension avec les map
    Bonjour,

    Je n'arrive pas à utiliser les maps pour en faire une table de hachage avec la clé comme clé primaire. Le problème ici précisément est une augmentation de la taille de map que je comprends pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ...
    typedef map<term,term_list> type_terms;
    ...
    term_map::term_map()
    {
      terms=new type_terms();
    }
    ...
    unsigned int term_map::size() const
    {
      return terms->size();
    }
    Le code qui provoque l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ...
    void term_map::insert(const term& t,const term& e)
    {
      type_terms::const_iterator it=terms->find(t);
      cout<<"X : "<<size()<<endl;
      if(it==terms->end())
        (*terms)[t]=term_list();
      cout<<"A : "<<size()<<endl;
      cout<<"A : "<<(*terms)[t]<<endl;
      //(*terms)[t]=term_list();//.insert(e);
      cout<<"B : "<<size()<<endl;
      cout<<"B : "<<(*terms)[t].size()<<endl;
    }
    sortie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    X : 0
    A : 1
    A : []
    B : 2
    B : 0
    Donc, je ne fais qu'accéder à un élément de la map dont la clé existe déjà et apparement une nouvelle entrée se crée.

    Merci de votre aide

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Je soupçonne un problème avec le type term, notamment avec son opérateur <
    Comment est-il défini ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 111
    Par défaut
    Merci pour ton aide. l'opérateur < est une fonction friend de term

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    term::term()
    {
      symbol="";
      line=0;
      type_term=true;
      term_empty=false;
    }
    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
     
    bool operator>(const term& e1,const term& e) 
    {
      if(e.is_empty()&&!e1.is_empty())
        return true;
      if(!e.is_empty()&&e1.is_empty())
        return false;
      if(e.is_empty()&&e1.is_empty())
        return false;
      return e1.get_symbol()>e.get_symbol()&&e1!=e;
    }
     
    bool operator<(const term& e1,const term& e) 
    {
      return !(e1>e&&e1!=e);
    }

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 111
    Par défaut
    En effet, apparement le problème venait bien de l'opérateurr >

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    bool operator<(const term& e1,const term& e) 
    {
      return !(e1>e&&e1!=e);
    }
    remplacé par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    bool operator<(const term& e1,const term& e) 
    {
      return !(e1>e||e1==e);
    }
    et ca fonctionne maintenant

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

Discussions similaires

  1. problème d'incompréhension avec les jointures
    Par healou dans le forum Requêtes
    Réponses: 15
    Dernier message: 08/06/2011, 11h32
  2. probleme avec les maps
    Par teramp3 dans le forum SL & STL
    Réponses: 3
    Dernier message: 31/03/2008, 11h01
  3. Produit de matrices avec les map
    Par Butterfly83 dans le forum SL & STL
    Réponses: 7
    Dernier message: 30/11/2007, 15h22
  4. Réponses: 1
    Dernier message: 18/09/2007, 10h41
  5. Probleme de auto_ptr avec les map
    Par Luther dans le forum C++
    Réponses: 8
    Dernier message: 08/04/2005, 10h49

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