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 :

std::map::find


Sujet :

SL & STL C++

  1. #1
    Membre éprouvé Avatar de Blowih
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 122
    Par défaut std::map::find
    Bonjour,
    j'utilise la fonction find de std::map:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    itertor it = myMap.find( Id );
    comment savoir si elle a trouver ou non une occurence correspondant au critere?

    Merci
    Ben

  2. #2
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (it != myMap.end())
    {
        // Trouvé
    }

  3. #3
    Membre éprouvé Avatar de Blowih
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 122
    Par défaut
    je pensais que l'on pouvais faire un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    itertor it = myMap.find( Id );
    if( it )
    {...}
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (it != myMap.end())
    {
        // Trouvé
    }
    me va tres bien

    le seul hic (peu etre?) c'est si l'element trouve est le dernier du map, que va donnée la comparaison avec myMap.end() ?

  4. #4
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Blowih
    c'est si l'element trouve est le dernier du map, que va donnée la comparaison avec myMap.end() ?
    .end() c'est l'element apres le dernier. Donc il n'y a pas de probleme.

  5. #5
    Membre éprouvé Avatar de Blowih
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 122
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    .end() c'est l'element apres le dernier. Donc il n'y a pas de probleme.
    Merki.

    juste pour savoir, si je fait it pointe sur le dernier ellement ou sur l'element d'apres?

    ( je mets quand meme resolu)

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Blowih
    juste pour savoir, si je fait it pointe sur le dernier ellement ou sur l'element d'apres?
    Celui d'apres.

  7. #7
    Membre éprouvé Avatar de Blowih
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 122
    Par défaut
    donc je peux pas faire un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    it= myMap.end();
    it->second->uneFonction();
    si je veux apeler une fonction sur le dernier element du map

  8. #8
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Blowih
    donc je peux pas faire un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    it= myMap.end();
    it->second->uneFonction();
    si je veux apeler une fonction sur le dernier element du map
    Exact. Et front() et back() n'existe pas sur les map. Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (--myMap.end())->second->uneFonction()

  9. #9
    Membre éprouvé Avatar de Blowih
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 122
    Par défaut
    Ok, Merci bien

    Ben

  10. #10
    Membre chevronné
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Par défaut
    Désolé de répondre dans un topic fermé, mais une question me vient à l'esprit:

    Quelle est la différence entre et ?

    Je m'appercois que j'ai toujours utilisé l'operateur ++ sur les iterateurs, et donc des reverse_iterators pour parcourir à l'envers.
    Si on peut utiliser -- aussi, quel est l'intéret des reverse_iterators ?

    Et front() et back() n'existe pas sur les map
    Mais begin() et rbegin() suffisent, non ?

    (on peut utiliser les reverse_iterators sur n'importe quel reversible container, donc les deque, list, vector, map, multimap, set et multiset)

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    je pense que -- sur un iterator ne marche que si l'itérateur en question est bidirectionnel (ce ne doit pas être le cas de certains adaptateurs de conteneurs...)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Médinoc
    je pense que -- sur un iterator ne marche que si l'itérateur en question est bidirectionnel (ce ne doit pas être le cas de certains adaptateurs de conteneurs...)
    Si tu fournis des reverse_iterator mais pas -- sur tes iterators, a priori tu as un probleme dans ta conception. Il est possible que ce soit comprehensible pour certaines structures de donnees, mais je n'en vois pas pour le moment.

    A propos de la question initiale, il n'y a pas reellement de difference entre faire des -- sur un iterator et des ++ sur un reverse_iterator; mais les expressions a utiliser dans le premier cas sont un peu delicate. Essaie d'exprimer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (ReverseIterator i = c.rbegin(), e = c.rend(); i != e; ++i) {
    ...
    }
    avec des iterators. reverse_iterator gere ca pour toi (il y a une classe template dans la norme qui fait la transformation).

  13. #13
    Membre chevronné
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Par défaut
    Oui c'est vrai, je pense que la même chose avec un iterator normal obligerait à faire un cas particulier pour le premier élément:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for( Iterator ite = --map.end(); ite!=map.begin(); --ite)
    {
       // traitement
    }  
    // traitement pour le premier
    (à moins qu'on puisse faire le test ite >= map.begin() ? )

    Enfin je suis bien d'accord, et de toute façon le code est plus clair avec des reverse_iterators

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

Discussions similaires

  1. SIGSEGV sur une std::map::find();
    Par DakM dans le forum Langage
    Réponses: 4
    Dernier message: 31/03/2012, 10h29
  2. [std::map] methode find
    Par ZaaN dans le forum SL & STL
    Réponses: 5
    Dernier message: 13/06/2007, 10h17
  3. std::map<int,CStringArray> ????
    Par philippe V dans le forum MFC
    Réponses: 1
    Dernier message: 12/10/2005, 06h48
  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