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 régulier 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
    Points : 115
    Points
    115
    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 : 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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (it != myMap.end())
    {
        // Trouvé
    }

  3. #3
    Membre régulier 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
    Points : 115
    Points
    115
    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 éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    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 régulier 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
    Points : 115
    Points
    115
    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 éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    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 régulier 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
    Points : 115
    Points
    115
    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 éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    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 régulier 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
    Points : 115
    Points
    115
    Par défaut
    Ok, Merci bien

    Ben

  10. #10
    Membre averti
    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
    Points : 353
    Points
    353
    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 sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    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...)

  12. #12
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    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 averti
    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
    Points : 353
    Points
    353
    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