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 :

Conteneur ordonné avec unicité ?


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut Conteneur ordonné avec unicité ?
    Bonjour,

    J'aurais besoin d'une séquence de chaînes de caractères du style "dernière entrée, première sortie", mais avec garantie de l'unicité.

    Apparemment, la STL n'offre rien de cela (?).

    Comment procéderiez-vous ?

    Une list avec par la suite une suppression des doublons via un des algorithmes offerts par la STL ?

    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
    Salut.
    Peut être une deque
    http://www.sgi.com/tech/stl/Deque.html
    et l'algo std::find_if pour voir si l'objet n'existe pas.

    Pour info, il existe maintenant unordered_set ,mais j'ai aucune idée si cela correspondra vraiment à ce que tu veut...

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Ou un stack, auquel j'applique l'algorithme unique_copy ?

  4. #4
    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 oodini Voir le message
    Ou un stack, auquel j'applique l'algorithme unique_copy ?
    stack c'est dernier entrée -> premier sortie et l'algorithme unique fait la comparaison uniquement sur les éléments consécutif :
    {1,1,1,1,2,3,4,5,1}
    donnera
    {1,2,3,4,5,1}

    http://r0d.developpez.com/articles/algos-stl/#LII-B-8

  5. #5
    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
    ou peut être une list avec le find_if.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    stack c'est dernier entrée -> premier sortie
    Je m'étais en fait trompé dans le post initial.

    et l'algorithme unique fait la comparaison uniquement sur les éléments consécutif :
    {1,1,1,1,2,3,4,5,1}
    donnera
    {1,2,3,4,5,1}
    Aïe...

    Y'a sûrement moyen de faire quelque chose avec un map.
    Je fais mon stack, et ensuite, je crée un map avec comme clés les chaînes de caractères, et comme valeur le "classement" de la première occurence dans le stack. Puis je reconstruis un vecteur à partir du map.

    Un peu tiré par les cheveux, mais bon...

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 752
    Par défaut
    Par construction un stack est dernier entré, premier sorti.
    Un conteneur de type deque semble plus approprié pour obtenir le FIFO.
    Si nous souhaitons en plus que la chaîne de caractère soit "unique", il y a deux approches:
    • comparer une chaine à insérer à l'ensemble des chaines de la liste,
    • créer un map qui servira à tester l'existence de la chaine.

    Le résultat sera le même, les performances varient en fonction du nombre de chaines de caractères qui seront dans la liste à l'instant T.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    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
    http://www.sgi.com/tech/stl/stack.html
    By default that underlying type is deque, but a different type may be selected explicitly.
    Utiliser une deque, un vector ou une list à la place de la stack pourrais surement le faire.

    Mais vue que tu doit avoir accès au élément pour tester l'unicité à chaque fois,
    un vector sera surement plus optimisé par rapport à la liste (mémoire contigüe). vector vs deque, aucune idée. Je ne connais pas deque.

    Aprés pour tester l'unicité, le std::find.
    [edit] Ou comme le propose wiztricks, peut être utiliser un autre centenaire comme le set ou map en parallèle.

  9. #9
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738

Discussions similaires

  1. Probleme conteneur list avec objet
    Par Dominus_Domi dans le forum Débuter
    Réponses: 9
    Dernier message: 17/03/2011, 18h20
  2. saveOrUpdate avec unicité
    Par Cogueran dans le forum Hibernate
    Réponses: 3
    Dernier message: 30/11/2010, 12h03
  3. Le conteneur vector avec les objets
    Par HK1989 dans le forum C++
    Réponses: 4
    Dernier message: 08/02/2009, 16h22
  4. tableau d'entiers avec unicité d'élements
    Par s-ehtp dans le forum C
    Réponses: 6
    Dernier message: 12/04/2008, 22h29
  5. Ordonner avec une sous requête ,possible ou pas?
    Par worm1 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 20/02/2007, 06h23

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