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]Problème avec map


Sujet :

SL & STL C++

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Points : 68
    Points
    68
    Par défaut [STL]Problème avec map
    Salut tlm,

    J'ai besoin d'un map qui à deux entiers donnés associe un string. Voilà ce que j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef struct{
    	int i;
    	int j;
    }entiers;
     
    typedef map<entiers, string> MyList;
    Mais ça plante lorsque j'insère un élément:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Some code..
    entiers tt;
    tt.i = 1;
    tt.j = 1;
    MyGroups->insert(pair<entiers ,string > (tt,Gname));
    //Some code
    Quelqu'un peut m'aider svp?

  2. #2
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    quelle est la déclaration de Gname ?
    autre question toute con, es tu sur de la validité de ton pointeur ?
    ca plante a l'exécution ? compilation ?

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Gname est un string que je récupère de mon interface graphique.
    Je suis sûre de la validté de mon pointeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	MyGroups = new MyList();
    En fait, il me sort cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    c:\program files\microsoft visual studio\vc98\include\functional(86) : error C2678: binary '<' : no operator defined which takes a left-hand operand of type 'const entiers' (or there is no acceptable conversion)
    c:\program files\microsoft visual studio\vc98\include\functional(86) : while compiling class-template member function 'bool __thiscall std::less<struct entiers>::operator ()(const entiers &,const entiers &) const'

  4. #4
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    le truc en fait c que pour trier la map, il a besoin que le type qui correspond à la clé surcharge l'opérateur <.

    passer par une classe ou une autre solution (j'ai pas ca sur moi sous la main). dsl

  5. #5
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    donc si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct{
    	int i;
    	int j;
    }entiers;
     
    typedef map<string, entiers> MyList;
    ça va marcher???

  6. #6
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    mais la, ce n'est plus la meme chose !
    ta clé de recherche, tri... et d'accès a tes données est une string.
    elle te permet d'accéder à un élément qui est du type struct.

    il faut t'assurer que tu puisses retrouver les string qui te permettront d'accéder à tes données, auquel cas, cette déclaration est bonne.

  7. #7
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Je viens d'essayer, ça marche.

    donc si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef struct{ int i; int j; }entiers; 
    typedef map<string, entiers> MyList;

    ça va marcher???
    Merci.

  8. #8
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    si ca correspond a ce que tu veux... ya pas de souci.

  9. #9
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    En principe, je peux retrouver les strings.

    Citation Envoyé par Rupella
    mais la, ce n'est plus la meme chose !
    ta clé de recherche, tri... et d'accès a tes données est une string.
    elle te permet d'accéder à un élément qui est du type struct.

    il faut t'assurer que tu puisses retrouver les string qui te permettront d'accéder à tes données, auquel cas, cette déclaration est bonne.

  10. #10
    Membre actif Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Points : 257
    Points
    257
    Par défaut
    si c'est le cas, tu te simplifieras grandement la vie !

  11. #11
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Faut savoir ce que tu veux faire exactement...

    Pour avoir ta structure entiers comme clé, il suffit de lui définir un opérateur < ou bien de passer un foncteur faisant la même chose en troisième paramètre template de ta map.

  12. #12
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Je viens de me rendre compte de ma confusion. Je préfère les string comme clé.

    Merci bcp.

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

Discussions similaires

  1. Problèmes avec map et chaînes en tant que clé
    Par oodini dans le forum SL & STL
    Réponses: 4
    Dernier message: 15/09/2008, 18h00
  2. STL Problème avec une liste d'instances de class
    Par BruceBoc dans le forum SL & STL
    Réponses: 12
    Dernier message: 16/02/2007, 14h12
  3. STL : problème avec un iterateur
    Par fabienpot dans le forum SL & STL
    Réponses: 4
    Dernier message: 06/09/2006, 09h06
  4. [PERL] Problème avec map
    Par LE NEINDRE dans le forum Langage
    Réponses: 9
    Dernier message: 05/10/2005, 09h48
  5. conteneur de la STL (problème avec DLL et COM)
    Par moldavi dans le forum MFC
    Réponses: 8
    Dernier message: 25/07/2005, 22h43

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