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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 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 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 averti
    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
    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
    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 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 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 averti
    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
    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
    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.

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