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 :

ajouter un élément dans une liste avec un tri d'insertion: possible dans la STL?


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 105
    Par défaut ajouter un élément dans une liste avec un tri d'insertion: possible dans la STL?
    Bonjour à tous,
    je voulais juste savoir si la STL permettait d'insérer un élément dans une liste (ou vecteur) déjà triée en l'insérant à la bonne place?

    par exemple, si j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::vector<MonObjet> monvecteur;
    //remplissage
    //...
     
    std::sort(monvecteur.begin(), monvecteur.end()); //tri
    avec MonObjet qui surchage la fonction opérateur <
    Existe-t-il une méthode pour ajouter l'élément à la bonen place ou je dois le faire manuellement (les algo de la stl étant généralement mieux optimisés que les miens XD)

    merci pour vs réponses

  2. #2
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Il suffit de regarder sur cette page pour connaitre les conteneurs triés de la STL (avec clef unique):
    http://www.sgi.com/tech/stl/UniqueSo...Container.html

    Aprés tu as aussi des algorithmes de tri dans la STL:
    http://www.sgi.com/tech/stl/sort.html

  3. #3
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Tu peux utiliser std::equal_range pour directement déterminer la position où l'élément devrait être inséré.

    Si tu en as la possibilité, remplis d'abord ton vecteur et trie le ensuite. Je soupçonne que cela sera plus efficace.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 105
    Par défaut
    Citation Envoyé par Luc Hermitte
    Tu peux utiliser std::equal_range pour directement déterminer la position où l'élément devrait être inséré.

    Si tu en as la possibilité, remplis d'abord ton vecteur et trie le ensuite. Je soupçonne que cela sera plus efficace.
    En fait je rempli à la base mon vecteur que je trie ensuite. Puis lors d'un traitement, j'ai besoin de prendre un élément dans la liste (le retirer), puis le rajouter ensuite. Le reste de la liste est déjà trié à ce moment, donc un ajout+tri sera peut etre moins efficace qu'un ajout directement à la bonen position.

    Merci pour les liens MatRem je regarde ça de suite

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 105
    Par défaut
    Bon j'ai regardé un peu tes liens, et ça me semble pas si evident.
    Déjà pour utiliser une Unique Sorted Associative Container, je n'arrive pas a chopper la bonne syntaxe pour le déclarer (ya un include special a mettre?).
    je crois que je vais garder la soluce du tri après avoir inséré l'élément dans mon vecteur

    sinon il ya visiblement deux types de tri:
    sort et stable_sort.

    Visiblement il est conseillé d'utiliser le deuxieme dans le cas ou on a des enregistrements à champ multiple.
    Mais dans mon cas, sachant que mes objets stockés ont la méthode '<' surchargée, doi-je vraiment utiliser stable_sort ou je peux laisser le sort normal?

  6. #6
    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
    Déjà pour utiliser une Unique Sorted Associative Container, je n'arrive pas a chopper la bonne syntaxe pour le déclarer (ya un include special a mettre?).
    C'est juste un concept, ça ne correspond concrétement à aucune classe.
    Ce qu'il fallait comprendre de cette réponse c'était d'utiliser std::set.

    sinon il ya visiblement deux types de tri:
    sort et stable_sort.

    Visiblement il est conseillé d'utiliser le deuxieme dans le cas ou on a des enregistrements à champ multiple.
    Mais dans mon cas, sachant que mes objets stockés ont la méthode '<' surchargée, doi-je vraiment utiliser stable_sort ou je peux laisser le sort normal?
    stable_sort sert juste à garder les éléments équivalents dans le même ordre qu'avant le tri.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment ajouter une chaîne dans une liste avec les API Windows ?
    Par DelphiCool dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 02/02/2013, 13h47
  2. [AC-2003] comment ajouter un élément dans une liste avec InputBox
    Par spacesheep dans le forum VBA Access
    Réponses: 6
    Dernier message: 02/10/2009, 13h33
  3. comment mettre une image dans une liste avec les values ?
    Par Ekimasu dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/05/2007, 17h51
  4. Nomer une liste a partir d'un nom pris dans une liste
    Par leau2001 dans le forum Général Python
    Réponses: 2
    Dernier message: 22/05/2006, 11h51
  5. Ajout dans une liste avec un bouton
    Par Invité dans le forum Access
    Réponses: 6
    Dernier message: 07/12/2005, 08h27

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