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] set::find !


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut [STL] set::find !
    voila,

    j ai ce conteneur rempli :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef std::set<CNCMClic *,CNCMClicCompare> TClicArray;
    TClicArray m_ClicArray;
    avec ce foncteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class _OLCDLL_CLASS CNCMClicCompare
    {	
    public:
    	bool operator()(const CNCMClic* x, const CNCMClic* y) const{ return x->GetClic() <= y->GetClic();}
    };
    et j aimerais utiliser la fonction std::set::find pour retrouver un iterateur sur l'element desiré.
    La recherche doit se faire sur le meme élement qu'utilise le foncteur pour trié la map.
    Comment faire ? et que passer à la fonction find ?

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Il me semble que ceci devrait fonctionner, tout simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CNCMClic monClic;
    m_ClicArray.insert(&monClic); //pour ajouter monClic
     
    // ailleurs, pour retrouver monClic
    m_ClicArray.find(&monClic);
    Le problème c'est qu'il faut avoir encore une référence à 'monClic'.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 44
    Par défaut
    Très simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TClicArray::iterator it = m_ClicArray.find(valeur_a_trouver);
    Cf. http://www.cplusplus.com/reference/stl/set/find.html

    Par évite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CNCMClic monClic;
    m_ClicArray.insert(&monClic); //pour ajouter monClic
    Car dès que tu sort de la porté de monClic, il est détruit, et donc le pointeur &monClic qui est présent dans ton set est invalide => Erreurs !

    Par contre je vois pas trop l'intérêt de faire un set de pointeurs. Tu pourrais expliquer ce que tu veux faire ?

    Syrmonsieur

  4. #4
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    Citation Envoyé par Syrmonsieur
    Par contre je vois pas trop l'intérêt de faire un set de pointeurs. Tu pourrais expliquer ce que tu veux faire ?
    C'est simple, c'est pour avoir un ensemble d'element trié sur une clé qui n'est pas disociée des elements du conteneur -> un membre de l'objet pointé.

    Et le find que j 'aimerais faire doit retrouvé l'ellement sur ce critère...

  5. #5
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Syrmonsieur
    Par évite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CNCMClic monClic;
    m_ClicArray.insert(&monClic); //pour ajouter monClic
    Car dès que tu sort de la porté de monClic, il est détruit, et donc le pointeur &monClic qui est présent dans ton set est invalide => Erreurs !
    Oui je sais bien, c'était juste pour l'exemple.

  6. #6
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Donc si ton set contient des pointeurs, il va falloir que tu gères toi-même la durée de vide des éléments que tu va y mettre. Attention aux fuites mémoires

Discussions similaires

  1. Constness et std::set::find
    Par Agoudard dans le forum SL & STL
    Réponses: 6
    Dernier message: 28/03/2011, 16h40
  2. Bug dans un wrapper de la classe STL set
    Par sphere369 dans le forum Débuter
    Réponses: 6
    Dernier message: 17/07/2009, 15h18
  3. STL set et fonction membre du conteneur
    Par bobyjoe dans le forum SL & STL
    Réponses: 4
    Dernier message: 29/06/2007, 13h23
  4. STL set et type complex
    Par jguillot dans le forum SL & STL
    Réponses: 20
    Dernier message: 13/11/2006, 22h14
  5. STL, set
    Par radium dans le forum SL & STL
    Réponses: 1
    Dernier message: 17/11/2005, 14h46

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