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 :

set, un conteneur associatif, qui n'associe rien ?


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut set, un conteneur associatif, qui n'associe rien ?
    Pour leur donne-t-on le nom de conteneurs associatifs ?

    Une map ou une multimap associe bien une clef à un élément, mais un set est juste un ensemble trié ? Pourquoi l'affubler du nom d'associatif ?

    Merci.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par NiamorH Voir le message
    Pour leur donne-t-on le nom de conteneurs associatifs ?

    Une map ou une multimap associe bien une clef à un élément, mais un set est juste un ensemble trié ? Pourquoi l'affubler du nom d'associatif ?

    Merci.
    Peut etre :
    Parce que la nature des éléments est impoprtante?
    Puis que c'est ce qui permet de les trié?
    et surtout parce que l'on n'as pas le droit de changer leur ordre? => association entre les elements

  3. #3
    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
    C'est juste un cas de particulier de conteneur associatif où la clé et l'élément sont confondus. Mais à part ça, cela ne diffère en rien d'un autre conteneur associatif tel que std::map.

  4. #4
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Ok, je reste un peu sur ma faim, mais je comprends à peu près.

  5. #5
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Dans le set, les clés sont portés par les objets eux-même. Ils en possèdent déjà une. Par contre, comme tu le sais déjà, la map introduit une clé externe pour chaque élément.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 399
    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 399
    Par défaut
    J'ignorais que les set étaient appelés "associatifs"... Et je dois dire que j'en suis surpris aussi.
    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.

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Par défaut
    Citation Envoyé par NiamorH Voir le message
    Pour leur donne-t-on le nom de conteneurs associatifs ?

    Une map ou une multimap associe bien une clef à un élément, mais un set est juste un ensemble trié ? Pourquoi l'affubler du nom d'associatif ?
    Tu vois peut-être une map<K, D> comme associant une donnée D à la clef K :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void f (std::map<K, D> &m, K k) {
        D d = m[k];
    }
    mais c'est plus le point de vue de operator[].

    Une map associe un élément à une clef : map<K, D>::element_type étant défini comme pair<const K, D>, map associe pair<const K, D> à K. C'est l'opération effectuée par find, qui est l'opération cruciale (je n'ose dire "opération clef") :
    find (k)->first = k

    Un set associe K à K :
    *find (k) = k

    En fait, les deux sont généralement implémentés en terme de rbtree<K, E, Pi>, qui associe un E à K, avec Pi : E -> K, tel que :
    Pi()(*find (k)) = k

    ce qui permet naturellement de définir set<K> à partir de
    rbtree<K, K, Id>
    (où Id() est l'identité)
    et map<K, D> à partir de
    rbtree<K, pair<const K, D>, First>
    (avec First()(x) = x.first)

    Bien sûr, j'ai simplifié, il y a aussi le comparateur à passer, et un paramètre pour choisir entre conteneur à clef unique (set, map) et conteneur à clef multiples (multiset, multimap).

    Les hash_(multi)set/map sont définis pareil, en terme de hashtable<K,E,Pi,etc.>

    Malheureusement, rien de tout ça n'est standard, et on doit supporter l'insupportable interface de set et compagnie, garantie "sure pour les bébés".

Discussions similaires

  1. Requete OR qui ne ramene rien
    Par Sapience dans le forum Langage SQL
    Réponses: 10
    Dernier message: 14/04/2005, 13h12
  2. procédure stockée qui ne fait rien
    Par trotters213 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 10/03/2005, 21h25
  3. Réponses: 11
    Dernier message: 17/01/2005, 17h58
  4. Conteneurs associatifs à clés dupliquées
    Par Christophe Brun dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 04/07/2004, 15h16
  5. [LG]Programme qui n'affiche rien
    Par ousunas dans le forum Langage
    Réponses: 4
    Dernier message: 17/02/2004, 20h38

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