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::set et find()


Sujet :

SL & STL C++

  1. #1
    Membre éprouvé Avatar de Harooold
    Homme Profil pro
    Ingénieur 3D temps réel
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Par défaut std::set et find()
    Bonjour

    J'essaie depuis ce matin de redefinir l'opérateur == à utiliser avec la fonction find() d'un set mais rien n'y fait :p

    J'ai par exemple une classe C

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    class C
    {
       public :
     
       int key;
       float val;
     
       struct lessC
       {
           inline bool operator () ( const C & c1, const C & c2 ) const
          {
              return c1.val < c2.val;
          }
       }
     
        inline bool operator == ( const C & c1 ) const
       {
          return key == c1.key;
       }
    };
    et un set de C
    std::set <C, C::lessC> monset;

    J'aimerais à l'insertion que mes élements soient triés par ordre croissant selon leur valeur, d'où l'opérateur () de la classe C.
    Là tout se passe bien.

    Mais maintenant j'aimerais que mon find() ne recherche qu'un élement ayant une certaine key, en ignorant son val.
    J'ai donc essayé de redéfinir l'opérateur == pour la classe C mais ça ne fonctionne pas ( damned, encore raté ! ).

    Je dois au fur et à mesure des insertions trier les élements selon leur val tout en concervant une recherche rapide sur leur key .. La solution de ce genre de set me semblait pas mal à la place d'utiliser un vector normal, faire le tri à la main et une recherche linéaire =/

    Si quelqu'un voyait l'astuce pour faire marcher ce set, je lui en serait très reconnaissant ! :p

    Merci d'avance et bonne année

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    std::set<T>::find n'utilise jamais l'opérateur ==. Il trouve l'élément uniquement avec l'opérateur <.

    Dans ton cas, tu ferais d'ailleurs mieux de redéfinir l'opérateur < pour C plutôt que d'avoir un foncteur au sein de C...

    Je dois au fur et à mesure des insertions trier les élements selon leur val tout en concervant une recherche rapide sur leur key .. La solution de ce genre de set me semblait pas mal à la place d'utiliser un vector normal, faire le tri à la main et une recherche linéaire =/
    Utilise un index séparé.
    Boost.MultiIndex te permet sinon de créer la structure de donnée adaptée avec les indexes que tu veux.

Discussions similaires

  1. std::set, find retourne n'importe quoi.
    Par darkman19320 dans le forum C++
    Réponses: 6
    Dernier message: 18/01/2012, 11h40
  2. Constness et std::set::find
    Par Agoudard dans le forum SL & STL
    Réponses: 6
    Dernier message: 28/03/2011, 16h40
  3. find() de std::set avec fonction de comparaison
    Par Biglo dans le forum SL & STL
    Réponses: 3
    Dernier message: 13/01/2006, 08h50
  4. Recherche "étoilée" avec std::set
    Par guejo dans le forum MFC
    Réponses: 2
    Dernier message: 06/05/2004, 13h28
  5. STL : std::set problème avec insert ...
    Par Big K. dans le forum MFC
    Réponses: 13
    Dernier message: 08/11/2003, 01h02

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