Partage
  • Partager sur Facebook
  • Partager sur Twitter

Trier par ordre alphabétique

?_?

    13 mars 2008 à 19:38:42

    Bonsoir,

    Dans le cadre de mon projet, je voudrais réaliser un tri par ordre alphabétique sur un fichier-base de données.
    J'ai regardé sur le net, et on parle souvent de STL, alors j'ai regardé sur "developpez", j'ai trouvé une introduction à STL, mais pour les exemples et des explications concrètes sur les fonctions, c'est pas le fort, vous me direz "et alors, pour ça t'as la doc", certes, mais je ne sais pas trop quoi chercher vu que les exemples donnés ne correspondent pas vraiment à ce que je cherche. J'ai trouvé un algo' tout fait donné sur "CS", mais je comprends mm pas ce qu'il se passe c'est pas marrant ^^ .

    Quelqu'un pourrait-il faire un petit spitch sur comment faire cet algo' de tri ( sachant que le fichier de données ferait plusieurs centaines de lignes ).

    Sinon je m'orienterais volontier faire SQLite avec Qt, mais la encore, quelqu'un connait-il un bon tuto ? car les tuto la dessus ne courent pas sur la toile..

    Un p'ti coup de pouce svp :)
    • Partager sur Facebook
    • Partager sur Twitter
      13 mars 2008 à 19:47:58

      tu as plusieurs choix ... les algos de tri c'est pas ce qui manque ... tu veux trier quoi ? un vector de string ? ou un tableau de chaines ?

      tu peux utiliser qsort() si tu es dans le deuxième cas ...
      sinon std::sort()

      sinon tu peux vouloir réfléchir ... et essayer de le faire toi-même :)
      ce sera pas très optimisé cela dit ... mais au moins tu auras progressé :)
      • Partager sur Facebook
      • Partager sur Twitter
        13 mars 2008 à 20:06:48

        ben, je veux trier ce que contient mon fichier de données, càd des string.

        Je cherche plutot à avoir un code optimal, les algorithmes c'est certes intéressant, mais comme le tri n'est pas du tout le but de mon programme, je préfère ne pas y passer trop de temps, en effet le tri sert essentiellement à une recherche dichotomique ne représentant qu'une partie infime du programme mais devant dependant être rapide, et à organiser un fichier texte qui servira d'autocompleter, donc je préfère utiliser un tout fait, ou une base de données!!

        Tu aurais un algo de tri à m'indiquer ? un que tu affectionne plus particulièrement ? :lol:
        • Partager sur Facebook
        • Partager sur Twitter
          13 mars 2008 à 20:08:39

          Ou alors, tu peux utiliser un conteneur ordonné...
          • Partager sur Facebook
          • Partager sur Twitter
            13 mars 2008 à 20:18:58

            ouch, c'est quoi ? ( plus d'explication qu'un lien merci d'avance )
            • Partager sur Facebook
            • Partager sur Twitter
              13 mars 2008 à 20:22:46

              1. std::vector<string> v = ....; // le remplissage
              2. std::sort(v.begin(), v.end()); // le tri

              Et c'est tout.


              Sinon, std::set<> est trié.
              • Partager sur Facebook
              • Partager sur Twitter
              C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                13 mars 2008 à 20:24:04

                std::set trie à chaque insertion.

                Quand tu as fini d'insérer, tous les éléments sont dans l'ordre. Ca t'évite d'appeler sort. Par contre, pour placer un nouvel élément, faut savoir où le placer ... Donc ça prend un peu de temps de ce côté là.
                • Partager sur Facebook
                • Partager sur Twitter
                  13 mars 2008 à 20:27:02

                  Citation : Alp

                  std::set trie à chaque insertion.

                  Quand tu as fini d'insérer, tous les éléments sont dans l'ordre. Ca t'évite d'appeler sort. Par contre, pour placer un nouvel élément, faut savoir où le placer ... Donc ça prend un peu de temps de ce côté là.



                  Si j'ai besoin de lui dire où le mettre,il sert à rien, c'est comme si je faisais le tri à la main, alors sois tu t'exprime mal, sois j'ai rien compris XD
                  • Partager sur Facebook
                  • Partager sur Twitter
                    13 mars 2008 à 20:28:31

                    Non, il sait lui même où le mettre, mais il doit le chercher, ça prend du temps de processeur. Il se trie lui-même au lieu que tu le fasse. C'est son avantage.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 mars 2008 à 20:30:34

                      Ah ok, donc c'est moi qui n'avait rien compris XD,tu parlais du processeur, j'avais pas suivi :x

                      Au risque d'abuser de ta bonté, t'aurais un exemple ?

                      EDIT : car en fait le problème c'est le fichier, pour fournir à set la liste dans laquelle il doit insérer mon string, je vais devoir lire toutle fichier !! et le mettre dans une variable, et mon fichier devrait tater aisément les 500 lignes :/, d'où mon gout pour la BDD ^^
                      • Partager sur Facebook
                      • Partager sur Twitter
                        13 mars 2008 à 21:17:20

                        Tu veux faire quoi ? Trier des lignes ?
                        1. std::vector<std::string> lignes;
                        2. // ou (2) std::set<std::string> lignes;
                        3. std::string ligne;
                        4. while (std::getline(file, ligne)) {
                        5.     lignes.push_back(ligne);
                        6.     // ou (2) lignes.insert(ligne)
                        7. }
                        8. std::sort(lignes.begin(), lignes.end());
                        9. // ou (2) ... rien
                        • Partager sur Facebook
                        • Partager sur Twitter
                        C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                          13 mars 2008 à 21:24:18

                          si tu pouvais rajouter des commentaires sur ce que fais chaque ligne stp, avec autant de précisions et de rigueur que tu peux, je comprends vite mais faut m'expliquer longtemps ^_^'

                          EDIT : ce que je veux faire ::

                          J'ai un fichier nommé "data.cb", il contient des informations sur des gens.
                          (Je précise que ce fichier est formaté par mon programme).

                          A un instant t, un nouveau membre est entré dans le fichier, et les informations le concernant sont initialisées à 0 ( toute les informations ssont des valeurs numériques ).

                          Lorsque on veut ouvrir la session d'un membre, on rentre son nom dans un QLineEdit et apparait alors les informations le concernant; hors, comme la base de données sera "grosse", il est impératif d'opérer via une recherche dichotomique, d'où le besoin que la liste soit ordonnée, de plus l'autocompleter a besoin d'une liste ordonnée ( fichier parallèle ).

                          Plus j'avance et plus je me dis que la base de donnée serait mieu :s
                          • Partager sur Facebook
                          • Partager sur Twitter
                            14 mars 2008 à 9:59:40

                            Tu devrais comparer la taille de ton fichier à la taille de ta mémoire vive. Il est fort probable que 500 lignes rentre aisément d'un seul coup d'un bloc dans la mémoire sans avoir besoin de bidouille.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              14 mars 2008 à 10:13:41

                              Citation : Feng Huang

                              si tu pouvais rajouter des commentaires sur ce que fais chaque ligne stp, avec autant de précisions et de rigueur que tu peux, je comprends vite mais faut m'expliquer longtemps ^_^'



                              Le premier bloc crée soit un vecteur de string, soit un ensemble trié de string (par défaut ça trie dans l'ordre alphabétique...)

                              Le deuxième va lire ligne par ligne dans le fichier et rajoute chaque ligne dans le vecteur ou l'ensemble trié.
                              Cela se fait plus rapidement pour le vecteur car il se contente de rajouter la ligne à la fin du "tableau" alors que lorsque tu insères la ligne dans le set, il va la mettre au bon endroit pour conserver l'ordre alphabétique.

                              Le dernier bloc trie dans l'ordre alphabétique toutes les lignes du vecteur... ou ne fait rien pour l'ensemble trié ... car justement c'est déjà trié.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                14 mars 2008 à 16:07:36

                                Citation : Feng Huang

                                si tu pouvais rajouter des commentaires sur ce que fais chaque ligne stp, avec autant de précisions et de rigueur que tu peux, je comprends vite mais faut m'expliquer longtemps ^_^'

                                EDIT : ce que je veux faire ::

                                J'ai un fichier nommé "data.cb", il contient des informations sur des gens.
                                (Je précise que ce fichier est formaté par mon programme).

                                A un instant t, un nouveau membre est entré dans le fichier, et les informations le concernant sont initialisées à 0 ( toute les informations ssont des valeurs numériques ).

                                Lorsque on veut ouvrir la session d'un membre, on rentre son nom dans un QLineEdit et apparait alors les informations le concernant; hors, comme la base de données sera "grosse", il est impératif d'opérer via une recherche dichotomique, d'où le besoin que la liste soit ordonnée, de plus l'autocompleter a besoin d'une liste ordonnée ( fichier parallèle ).

                                Plus j'avance et plus je me dis que la base de donnée serait mieu :s



                                Si les données sont trop importantes et que tu as peurs de ne pas arriver à les gerer efficacement alors fait le saut sur la BDD.

                                Il n'y a pas 10000 façon d'utiliser une BDD! SQLite étant même très facile.

                                Si les tutos expliqués textuelements sont difficiles à trouver, apprend par l'exemple :
                                http://www.sqlite.org/quickstart.html
                                http://www.sqlite.org/docs.html
                                http://doc.trolltech.com/4.1/sql-driver.html#qsqlite-for-sqlite-version-3-and-above
                                http://doc.trolltech.com/4.1/qsqldatabase.html#setConnectOptions

                                Je n'ai jamais travailler avec SQLite ou Qt mais je sais lire de la doc et chercher sur Google. À ce que j'ai pu voir TOUT est là!


                                • Partager sur Facebook
                                • Partager sur Twitter

                                Trier par ordre alphabétique

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown