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: les map et la methode find. que fait-elle?


Sujet :

SL & STL C++

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 6
    Points : 3
    Points
    3
    Par défaut STL: les map et la methode find. que fait-elle?
    Bonjour a tous,
    nouvelle sur le forum, je vous lis depuis un moment.
    C'est a mon tour de vous poser une question.

    Je veux utiliser une map dont la cle est un objet que j'ai cree moi. Que je definis comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CMyKey
    {
         public :
         char * valeur1;
         int      valeur2;
         char*  valeur3;
     
    };
    La question que je me pose et a laquelle je ne trouve pas de reponses (je cherche peut etre mal mais..je tourne en rond la!) est:
    que se passe-t-il avec la methode find....sur quoi la map se base-t-elle pour tester l'egalite de la cle?
    Dois-je definir un operator == pour mon objet CMyKey ? Je ne voudrais pas qu'elle compare les pointeurs au lieu de comparer les valeurs.....

    ???

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 682
    Points
    10 682
    Billets dans le blog
    3
    Par défaut
    Tu as presque touvé : elle se base sur l'opérateur <, ou sur un foncteur que tu donnes en 3° arguement de ton template (il vaut par défaut std::less<>, soit operateur <).

  3. #3
    Candidat au Club
    Inscrit en
    Novembre 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    merci beaucoup pour l'info! j'ai tourne autour des foncteurs pendant un moment sans vraiment saisir le lien avec la methode find! Je vais donc tout simplement garder mon operateur < que j'avais deja redefini...
    et je suis en train de passer mes char* en string de la stl

  4. #4
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Ben là pour find il utilise par défaut le foncteur std::less< >, cependant tu peux en préciser un toi, que tu peux avoir réalisé par tes soins, ou utiliser un foncteur trouvé ailleurs, enfin en gros un foncteur qui n'est pas less < >
    Tu as aussi find_if qui prend en 3eme argument un prédicat(foncteur retournant un booléen) ... Et certains autres de <algorithm> qui prennent des foncteurs en arguments, et c'est très pratique. Une fois que tu comprends comment cela marche, cela viendra tout seul.

    Bonne progr,

    Alp

  5. #5
    Candidat au Club
    Inscrit en
    Novembre 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    effectivement cette solution me plait bien. Je vais m'atteler a la creation d'un foncteur d'egalite sur ma classe.
    Merci bcp pour les infos.

  6. #6
    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
    Attention ce n'est pas un foncteur d'égalité que tu dois faire, mais quelque chose d'équivalent à un opérateur <. Ca doit donc renvoyer true si et seulement si le premier élément testé est inférieur (dans le sens de la relation d'ordre que tu auras définie) au second.

  7. #7
    Candidat au Club
    Inscrit en
    Novembre 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    ok j'ai compris
    Merci!

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

Discussions similaires

  1. instruction db, que fait-elle exactement ?
    Par Lintel-oo dans le forum x86 32-bits / 64-bits
    Réponses: 9
    Dernier message: 10/11/2014, 17h49
  2. [STL] Question sur les MAP
    Par Goldstein00 dans le forum Langage
    Réponses: 1
    Dernier message: 22/05/2011, 13h49
  3. Réponses: 2
    Dernier message: 04/03/2010, 19h52
  4. [std::map] methode find
    Par ZaaN dans le forum SL & STL
    Réponses: 5
    Dernier message: 13/06/2007, 10h17
  5. Quel format de fichier utiliser pour les maps ?
    Par fb57 dans le forum OpenGL
    Réponses: 3
    Dernier message: 23/09/2004, 20h22

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