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

MFC Discussion :

Tri rapide d'une CListCtrl


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par défaut Tri rapide d'une CListCtrl
    Bonjour

    Depuis un moment je recherche une CListCtrl capable de réaliser un tri rapide sur des milliers de lignes. Car celle fournis n'est pas rapide du tout mais pas du tout.

    J'ai donc cherché et cherché mais je n'ai pratiquement rien trouvé. A part des algorithmes purs qu'il faudrait spécialement adapté pour une CListCtrl.

    Par contre j'ai trouvé cet article sur CodeGuru "Quick Sort Algorithm Comparing Any Data Type"
    Ca fonctionne correctement quand la liste est dans le désordre mais quand je reclique sur l'entête de la colonne pour faire le tri inverse, au bout de 10-15 minutes j'ai eu un gros STACK OVERFLOW.
    Donc cette solution n'est pas viable.

    Mais je suis certain qu'il existe des personnes qui ont dû implémenter ce genre de chose. Alors s'il vous plait partagé ce bout de code avec nous.

    Merci d'avance

  2. #2
    Membre éclairé Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par défaut
    En continuant à chercher j'ai trouvé un site qui permet de faire des comparaisons d'algo de tri.

    http://vision.bc.edu/~dmartin/teachi...-html/all.html

    Mais concrétement ça ne m'aide pas pour ma solution mais ça permet d'avoir une idée des tris.

    Mais j'ai eu une idée con. Si une colonne est déjà trié dans un sens. Par exemple avec un tri rapide.
    Donc quand l'utilisateur veut inverser le sens il suffit de prendre le premier de la liste et le mettre à la fin.
    Le problème c'est si l'utilisateur modifie ou ajout un élément.

    A voir donc

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Salut,
    Pour ma part je n'ai rien trouvé de mieux que les tris disponibles dans la stl (algo ou container). Ils sont rapides et fiables.
    André

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 66
    Par défaut
    salut,
    essaie avec le fichier joint.
    Fichiers attachés Fichiers attachés

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Mon conseil: Virtual list + algos stl.

  6. #6
    Membre éclairé Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par défaut
    J'ai bien eu l'idée de faire du OwnerData (VirtualList) mais dans mon projet les données de la liste viennent de différentes sources.
    A moins que je crée des données temporaires dans ma liste contenant toutes ces données. J'utilise le OnGetDispInfo avec ces données stockés puis que j'utilise les stl pour faire le tri.

    Arréter moi si je m'égare.

    Par contre pour les stl je ne sais pas comment faire. Avec quel algo, container, ...

  7. #7
    Membre éclairé Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par défaut
    Je suis un peu fénéant et je cherche un container stl de type tableau à deux dimensions pouvant être trier.
    J'ai l'impression que je recherche l'impossible mais je cherche.

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par vanitom Voir le message
    J'ai bien eu l'idée de faire du OwnerData (VirtualList) mais dans mon projet les données de la liste viennent de différentes sources.
    Et alors?
    Citation Envoyé par vanitom Voir le message
    A moins que je crée des données temporaires dans ma liste contenant toutes ces données.
    Que sont tes sources? Tu peux les interroger dynamiquement sans perdre en perf?
    Citation Envoyé par vanitom Voir le message
    J'utilise le OnGetDispInfo avec ces données stockés puis que j'utilise les stl pour faire le tri.


    Citation Envoyé par vanitom Voir le message
    Arréter moi si je m'égare.
    La route est droite mais la pente est forte: courage!

    Citation Envoyé par vanitom Voir le message
    Par contre pour les stl je ne sais pas comment faire. Avec quel algo, container, ...
    Pour le choix du container, je dirais, à priori un std::vector<std::vector<string> >: un vecteur de lignes, les lignes étant un vecteur de colonnes, les colonnes étant les chaînes!
    Ensuite, comparaison sur la chaîne correspondant à la colonne de tri.
    Pour un choix de container adapté à ta solution, tu peux utiliser le tableau ici ou celui-ci.

  9. #9
    Membre éclairé Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par défaut
    Ok merci pour toutes les informations.

    Je pense que je vais choisir des list plutot que des vector.

    Par contre je vais mettre ça en pose quelques jours pour faire d'autres choses soit disant plus important.
    Mais je reviendrais dans ce post s'il m'arrive encore des problèmes.

    En tout cas merci pour tout.

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

Discussions similaires

  1. Tri rapide d'une grille (TStringGrid)
    Par Pierre Castelain dans le forum Codes sources à télécharger
    Réponses: 1
    Dernier message: 01/02/2013, 09h08
  2. Réponses: 13
    Dernier message: 25/04/2012, 18h04
  3. [MFC] surbrillance de ligne dans une CListCtrl
    Par Yoshette dans le forum MFC
    Réponses: 4
    Dernier message: 15/04/2005, 16h09
  4. Tri rapide
    Par DBBB dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 10/12/2004, 17h54
  5. Selectionner ligne dans une ClistCtrl
    Par fr66 dans le forum MFC
    Réponses: 2
    Dernier message: 03/05/2004, 14h58

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