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 :

Trier une QMap


Sujet :

Qt

  1. #1
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Mars 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Mars 2007
    Messages : 46
    Points : 18
    Points
    18
    Par défaut Trier une QMap
    Bonjour,
    Je suis débutante en C++ et je suis en train de faire un programme qui classe des mots dont on a calculé la fréquence dans un texte.
    Je les ai mis dans une QMap mais maintenant j'aimerais faire apparaitre les mots, dans l'ordre croissant de fréquence et les enregistrer dans un fichier (ça je sais faire!)
    Est-ce possible de faire ça avec une QMap? Ou sinon dans quelle type de variable puis-je ranger mes données triées ?

    Merci d'avance
    PS : Pour info je travaille sur PC et Qt Designer (je sais pas si ca a de l'importance)
    Si la réponse est dans un FAQ ou tutorial, désolée j'ai cherché mais n'est pas trouvé. Dans ce cas pouvez-vous m'indiquer le lien?

  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
    Citation Envoyé par petitange_lili Voir le message
    Bonjour,
    Je suis débutante en C++ et je suis en train de faire un programme qui classe des mots dont on a calculé la fréquence dans un texte.
    Je les ai mis dans une QMap mais maintenant j'aimerais faire apparaitre les mots, dans l'ordre croissant de fréquence et les enregistrer dans un fichier (ça je sais faire!)
    Est-ce possible de faire ça avec une QMap? Ou sinon dans quelle type de variable puis-je ranger mes données triées ?

    Merci d'avance
    PS : Pour info je travaille sur PC et Qt Designer (je sais pas si ca a de l'importance)
    QMap est un conténaire trié en fonction de la clef. Peut tu mettre un peut de code pour voir comment tu l'utilise?

    Citation Envoyé par petitange_lili Voir le message
    Si la réponse est dans un FAQ ou tutorial, désolée j'ai cherché mais n'est pas trouvé. Dans ce cas pouvez-vous m'indiquer le lien?
    Pas encore. Si ça t'intéresse tu peut faire une Q/R

  3. #3
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Mars 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Mars 2007
    Messages : 46
    Points : 18
    Points
    18
    Par défaut
    Ah donc si elle est triée en fonction de la clé si je met en clé des nombres et non pas du texte ca devrait me le trier mais dans l'ordre décroissant non?

    Je mets un bout de code qui compte la fréquence des mots et les rangent dans une QMap appelée fréquenceMots

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    void CategoriseurDialogImpl::frequences()
    {
    	QValueList <QString>::Iterator doigt; //QValueList coupeEnMots où on a rangé les mots d'un texte
     
    	int nbOcc;
    	for(doigt=coupeEnMots.begin(); doigt != coupeEnMots.end(); ++doigt)
    	{	
    		if(frequenceMots.contains(*doigt) )// si le mot existe
    		{
    			nbOcc=frequenceMots[*doigt]; //on récupère le nbre d'occ déjà inscrites
    			frequenceMots[*doigt]=nbOcc+1; // on ajoute 1
    		}
    		else
    			frequenceMots[*doigt]=1; //on crée une autre entrée dans la QMap
    	}
    }

  4. #4
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut,

    Citation Envoyé par petitange_lili Voir le message
    Ah donc si elle est triée en fonction de la clé si je met en clé des nombres et non pas du texte ca devrait me le trier mais dans l'ordre décroissant non?
    Non, croissant selon la clé, donc c'est bon dans ton cas.

    Edit: par contre, utilise bien une QMultiMap et pas une QMap, tu auras des surprises pour le cas de fréquence identiques sinon.

  5. #5
    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 petitange_lili Voir le message
    Ah donc si elle est triée en fonction de la clé si je met en clé des nombres et non pas du texte ca devrait me le trier mais dans l'ordre décroissant non?
    Le seul truc est que tu n'as pas le droit de modifier la clef...
    Ce que tu fait est bien.

    Mais aprés tu pourrai utiliser une QMultiMap pour retrier tes mots en fonction du nombre.
    Tout dépend de ce que tu veut faire aprés
    Regarde ce lien :
    http://cpp.developpez.com/faq/cpp/?p...hoix_conteneur
    C'est pour la stl, mais il y as les même contenaire dans Qt

  6. #6
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Mars 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Mars 2007
    Messages : 46
    Points : 18
    Points
    18
    Par défaut
    Moi quand j'affiche mes résultats ca me les mets dans l'ordre alphabétique ca veut donc dire que ma clé c'est du texte
    QMultiMap connait pas mais je vais me renseigner sur ton lien

    Pour le moment je veux juste savoir trier les mots dans l'ordre croissant de fréquence.

    Merci déjà pour ces réponses!

  7. #7
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Il te faut itérer sur ta QMap actuelle, et insérer pour chaque valeur, la clé dans une QMultiMap nouvellement créée.
    Si on note M et F le mot et sa fréquence, tu passes d'une QMap<M,F> à une QMultiMap<F,M> où une fréquence peut avoir plusieurs mots.

  8. #8
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Mars 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Mars 2007
    Messages : 46
    Points : 18
    Points
    18
    Par défaut
    Merci pour vos solutions
    De mon côté j'ai trouvé un truc tout bête pour l'affichage, c'est mettre true à la propriété sorting de la QTable que j'ai crée pour mettre mes données (mot associé à sa fréquence).
    Ca trie bien les données mais par contre il n'y a plus de lien entre le mot et sa fréquence. Donc ca fait n'importe quoi!
    Comment puis-je rétablir ce lien ?

  9. #9
    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

  10. #10
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Citation Envoyé par petitange_lili Voir le message
    Merci pour vos solutions
    De mon côté j'ai trouvé un truc tout bête pour l'affichage, c'est mettre true à la propriété sorting de la QTable que j'ai crée pour mettre mes données (mot associé à sa fréquence).
    Ca trie bien les données mais par contre il n'y a plus de lien entre le mot et sa fréquence. Donc ca fait n'importe quoi!
    Comment puis-je rétablir ce lien ?
    Il ne faut pas utiliser une table, mais plutôt une liste. Une table, si tu veux garder toute la ligne ensemble, faut le faire à la main. Une list ou un arbre, tu n'as rien à faire et tu peux avoir tout de même plusieurs colonnes.

    Il te faudra par contre réimplémenter operator< dans une classe dérivée de Q*WidgetItem pour garder un tri sur un entier, et pas un tri sur une chaîne; ceux à quoi va te servir le lien de mongaulois.

  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 IrmatDen Voir le message
    Il ne faut pas utiliser une table, mais plutôt une liste. Une table, si tu veux garder toute la ligne ensemble, faut le faire à la main. Une list ou un arbre, tu n'as rien à faire et tu peux avoir tout de même plusieurs colonnes.

    Il te faudra par contre réimplémenter operator< dans une classe dérivée de Q*WidgetItem pour garder un tri sur un entier, et pas un tri sur une chaîne; ceux à quoi va te servir le lien de mongaulois.
    Une liste peut avoir plusieurs colonne??

  12. #12
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Mars 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Mars 2007
    Messages : 46
    Points : 18
    Points
    18
    Par défaut
    Ca devient trop compliqué pour moi
    Merci quand même !

  13. #13
    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 petitange_lili Voir le message
    Ca devient trop compliqué pour moi
    Merci quand même !
    ?

  14. #14
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Mars 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Mars 2007
    Messages : 46
    Points : 18
    Points
    18
    Par défaut
    Je connais la moitié des choses dont vous me parlez, c'est déprimant

  15. #15
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Citation Envoyé par petitange_lili Voir le message
    Je connais la moitié des choses dont vous me parlez, c'est déprimant
    N'hésites pas à spécifier exactement ce que tu ne comprends pas; ce sera dur d'expliquer sinon.

  16. #16
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Une liste peut avoir plusieurs colonne??
    Bloody hell! Pardon, il n'y a que les arbres/table qui le permette

  17. #17
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Mars 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Mars 2007
    Messages : 46
    Points : 18
    Points
    18
    Par défaut
    Alors j'explique
    J'ai créé une QTable avec 2 colonnes
    1 avec les mots, la deuxièmes avec le nombre de fois que le mot apparait dans le texte.
    J'ai donc après avoir fait une QMap mis les clés dans la 1ère colonne et les valeurs dans la 2ème

    A partir de là je voulais savoir si l'utilisateur peut trier les données lorsqu'il clique sur le nombre d'occurrences des mots.
    Comme on le fait quand on veut trier par exemple des valeurs Excel en cliquant sur le haut de la colonne.

    C'est pas obligé que ce soit du code, peut être une propriété du Widget. J'avais fait "sorting" mais à ce moment là je perd le lien entre les mots et les occurrences!

    Le lien qu'à mis Mongaulois c'est du chinois pour moi, cela ne fait que 5 mois que je programme en C++ et pas de manière intensive...

    Voilà
    Merci encore

  18. #18
    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
    t'es en qt 3 ou 4??

  19. #19
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Mars 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Mars 2007
    Messages : 46
    Points : 18
    Points
    18
    Par défaut
    Qt 3 apparemment selon le about Qt

  20. #20
    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
    lol
    donc faut mieux que tu utilise des
    http://qt.developpez.com/doc/3.3/qlistviewitem/
    EN QT3 tu peut avoir plusieurs colonnes

Discussions similaires

  1. [VB.NET] Trier une table de mon DataSet
    Par San Soussy dans le forum ASP.NET
    Réponses: 3
    Dernier message: 03/03/2005, 17h30
  2. Comment trier une DBGRID en cliquant sur une colonne
    Par sessime dans le forum Bases de données
    Réponses: 8
    Dernier message: 09/10/2004, 16h18
  3. [Debutant(e)]Trier une liste
    Par LeDébutantJava dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 19/08/2004, 12h44
  4. [langage] Trier une hastable
    Par Gogoye dans le forum Langage
    Réponses: 11
    Dernier message: 03/08/2004, 16h43
  5. Créer une vue pour trier une requete UNION ?
    Par Etienne Bar dans le forum SQL
    Réponses: 3
    Dernier message: 03/01/2003, 20h22

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