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

Qt Discussion :

Comment implémenter élégamment un tri multicolonnes ?


Sujet :

Qt

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 22
    Points : 13
    Points
    13
    Par défaut Comment implémenter élégamment un tri multicolonnes ?
    Bonjour à tous !

    Comment fait-on en Qt4 et C++ pour trier un tableau de 2 colonnes et de n lignes, en gardant la cohérence des lignes ? exemple :

    tableau (initialement trié sur la colonne 0)

    0,7
    1,14
    2,2
    3,5
    4,11
    5,14

    je veux arriver à le trier sur la colonne 1

    2,2
    3,5
    0,7
    4,11
    1,14
    5,14

    Je sais faire ça "à la main", mais peut-être existe-t-il une fonction ou des structures en Qt me permettant un code plus élégant ?


    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 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Salut.
    C'est quoi comme tableau? un vector? une widget? autre?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    C'est un tableau de travail. J'ai besoin de lancer des fonctions sur la colonne 1, dans l'ordre ascendant de ses valeurs, mais en gardant le souvenir de l'ordre initial. C'est ce qu'on fait par exemple avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     QTableWidget toto;
    ...
    toto.sortItems (1, Qt::AscendingOrder );
    Mais ce serait un peu lourd de sortir la cavalerie pour un tableau de 15 lignes et 2 colonnes.

    qSort trie les containers -> une solution de ce côté là ?

    Pour répondre à ta question : je n'ai pas d'a-priori, je reste ouvert à toute proposition.

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    tu veut trier en fonction d'un colone et pouvoir revenir en arrière c'est ca?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Pas forcément revenir en arrière, simplement que les deux valeurs composant une ligne restent ensemble.

    Imagine que les lignes soient des paires de coordonnées (x, y) et que je veuille trier le tableau selon les y.

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Ce n'est pas cette fonction?
    http://qt.developpez.com/doc/latest/...html#sortItems
    [edit]
    a si tu la connait. Mais je ne comprend pas pourquoi tu ne veut pas l'utiliser?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Ce n'est pas cette fonction?
    http://qt.developpez.com/doc/latest/...html#sortItems
    [edit]
    a si tu la connait. Mais je ne comprend pas pourquoi tu ne veut pas l'utiliser?
    Ben créer un QTableWidget, les 30 QTableWidgetItem associés, les relier au QTableWidget, faire des .setText(QString(valeur)) pour chacun, trier, puis récupérer par des .text().toInt() ça marche certainement mais c'est bien lourd, sutout que je n'affiche rien du tout à ce moment-là ! Je pensais qu'il y avait une solution plus directe avec les classes 'container'.

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut

    Dsl, mais j'ai vraiment pas compris t'as question alors....

    1-tu as des valeurs dans un tableau.
    2-Ce tableau possède N colonne par ligne.
    3-tu choisir une colone pour trier tes ligne
    C'est bien ça?

    Donc comment as tu codé ton tableau?

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    int tableau[15][2], je le remplis et je veux trier sur la colonne 1.
    Vu autrement, considère que j'ai 15 paires d'entiers (x, y) qui m'arrivent triées selon les x, je veux les trier selon les y.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Bon, je vais reformuler la question. Imaginez que vous récupérez quelque part une petite liste contenant le nom et le prénom d'une quinzaine de personnes. Vous voulez l'afficher dans l'ordre des prénoms.

    Ou alors on vous donne une liste code postal <--> nombre d'habitants, que vous voulez classer par nombre d'habitants


    Comment faites-vous ? vous la mettez dans un tableau ? une QList ? un QVector, un QMap ? autre ?

  11. #11
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par PapaJaac Voir le message
    Bon, je vais reformuler la question. Imaginez que vous récupérez quelque part une petite liste contenant le nom et le prénom d'une quinzaine de personnes. Vous voulez l'afficher dans l'ordre des prénoms.

    Ou alors on vous donne une liste code postal <--> nombre d'habitants, que vous voulez classer par nombre d'habitants
    Pour commencer, ce que je ferais est une struct qui contient tes éléments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct A
    {
        int         codePostal;
        QString   ville;
        int         nbHabitant;
     
    };
    Comment faites-vous ? vous la mettez dans un tableau ? une QList ? un QVector, un QMap ? autre ?
    Tout dépend de ce que tu fera avec après.

    Je pense que tu veut pouvoir trier comme tu le veut, choisie entre QList et QVector( c'est un peu la même chose, sauf que QList gère des pointeur).

    Aprés pour le tri, j'utiliserai std::sort avec un predicat(foncteur)
    http://r0d.developpez.com/articles/algos-stl/#LII-C-1-1

    Pour info, il existe des chose beaucoup plus complex
    http://www.boost.org/doc/libs/1_36_0...doc/index.html

  12. #12
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Ah, d'accord, donc une Qlist de ces structs ? bonne idée, merci !!!

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

Discussions similaires

  1. Comment implémenter lemonldap?
    Par Aldo dans le forum Apache
    Réponses: 7
    Dernier message: 25/01/2007, 21h32
  2. [VB.Net]Comment implémenter un Simulateur de combats?
    Par stargatejojo dans le forum Windows Forms
    Réponses: 19
    Dernier message: 20/04/2006, 16h04
  3. Réponses: 4
    Dernier message: 07/04/2006, 18h08
  4. Réponses: 2
    Dernier message: 02/12/2005, 17h22
  5. Comment implémenter un Datawarehouse ?
    Par raslain dans le forum Alimentation
    Réponses: 2
    Dernier message: 20/10/2005, 11h09

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