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

C++ Discussion :

Organisation de donnees avec <map>


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Points : 83
    Points
    83
    Par défaut Organisation de donnees avec <map>
    je possede un fichier:
    Larks'_Tongues_In_Aspic,_Part_III 5:56 King_Crimson Three_of_a_Perfect_Pair Rock 9
    Between_the_Devil_and_the_Deep_Blue_Sea 2:44 Larkins,_Ellis Jazz_Piano_III_(A_Smithsonian_Collection) Jazz 2
    Exiles 5:47 King_Crimson Larks'_Tongues_In_Aspic Rock 3
    Larks'_Thrak 2:37 League_of_Crafty_Guitarists Intergalactic_Boogie_Express Rock 3
    Schubert-Liszt,_Hark,_Hark,_The_Lark 3:03 Paderewski,_Ignace Josef_Hofmann_&_Ignace_Jan_Paderewski_Play_Liszt Classical 5
    Larks'_Tongues_In_Aspic,_Part_2 6:57 King_Crimson Larks'_Tongues_In_Aspic Rock 6
    Book_of_Saturday 2:49 King_Crimson Larks'_Tongues_In_Aspic Rock 2
    Schubert-Liszt,_Hark,_Hark_the_Lark 2:57 Paderewski,_Ignace Paderewski_Plays_Concert_No._1 Classical 7
    Balakirev,_The_Lark 5:25 Lewin,_Michael A_Russian_Piano_Recital Classical 2
    que je voudrais organiser en tant que:
    King Crimson
    _____Larks' Tongues In Aspic
    _____Three of a Perfect Pair
    Larkins, Ellis
    _____Jazz Piano III (A Smithsonian Collection)
    League of Crafty Guitarists
    _____Intergalactic Boogie Express
    Lewin, Michael
    _____A Russian Piano Recital
    Paderewski, Ignace
    _____Josef Hofmann & Ignace Jan Paderewski Play Liszt
    _____Paderewski Plays Concert No. 1
    J'ai ecris du code de facon a avoir une map, des structures pour chaque information.

    Mais je ne n'arrive a imprimer la liste que celles des artistes:

    King Crimson
    Larkins, Ellis
    League of Crafty Guitarists
    Lewin, Michael
    Paderewski, Ignace
    avec la boucle suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        for (arit = artists.begin(); arit != artists.end(); arit++) {
            a = arit->second;
            cout << "\n" << a->name << endl;
        }
    Mais quand je veux mettre l'album de l'artiste en dessous de son nom, j'ai tout les albums qui s'affichent en meme temps, pour chaque artiste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        for (arit = artists.begin(); arit != artists.end(); arit++) {
            a = arit->second;
            cout << "\n" << a->name << endl;
            for (ait = albums.begin(); ait != albums.end(); ait++) {
                cout << "   " << ait->first << "\n";
            }
        }
    Comme ce n'est pas evident de m'aider avec la page de code que j'ai, j'ai attache le fichier (lib2.cpp), compilable, avec sa librairie (lib2.h), et le fichier "Lark.txt" a specifier en tant que UNIX>./lib2 Lark.txt.

    Ca serait genial si quelqu'un s'interesse a mon code et m'aide, j'aimerais bien comprendre sur quoi je plante.

    Merci
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    C'est normal.
    Dans ta boucle for de plus haut niveau, tu passes sur chaque artiste, et pour chacun tu lances une autre boucle for pour sortir les albums. Seulement cette deuxième boucle for sort tous les albums, sans s'occuper de l'artiste courant. De plus, elle parcourt ta map d'albums globale alors qu'elle devrait juste passer sur la map d'albums de la structure artist.
    Citation Envoyé par Remplissage de la map globale
    Lecture de la ligne courante
    Artiste existant?
    ---oui -> Album existant?
    ------------oui -> Chanson existante?
    ---------------------oui -> On ne faire rien
    ---------------------non -> Ajout de la chanson dans la map de chansons de l'album
    ------------non -> Ajout de l'album dans la map d'albums de l'artiste
    ---non -> Ajout de l'artiste dans la map d'artistes
    Citation Envoyé par Affichage de la liste
    Boucle1 (parcours map des artistes)
    ---Affiche l'artiste courant
    ---Boucle2 (parcours map des albums de l'artiste courant)
    ------Affiche l'album courant
    ------Boucle3 (parcours map des chansons de l'album courant)
    ---------Affiche la chanson courante
    Tu n'as au final besoin que d'une seule map globale, chaque structure contenant une map du type contenu.
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  3. #3
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Points : 83
    Points
    83
    Par défaut
    Merci, je suis arrive a afficher le nom des albums sous le nom des artistes.

    mais la aussi je bloque quant a afficher le titre des chansons sous chaque album. Ce n'est pas le meme concept, je comprend pas le fait que j'utilise la meme logique, mais ca ne mene a rien.

    je voudrais afficher cette fois-ci:
    King Crimson
    _____Larks' Tongues In Aspic
    __________2. Book of Saturday: 2:49
    __________3. Exiles: 5:47
    __________6. Larks' Tongues In Aspic, Part 2: 6:57
    _____Three of a Perfect Pair
    __________9. Larks' Tongues In Aspic, Part III: 5:56
    Larkins, Ellis
    _____Jazz Piano III (A Smithsonian Collection)
    __________2. Between the Devil and the Deep Blue Sea: 2:44
    League of Crafty Guitarists
    _____Intergalactic Boogie Express
    __________3. Larks' Thrak: 2:37
    Lewin, Michael
    _____A Russian Piano Recital
    __________2. Balakirev, The Lark: 5:25
    Paderewski, Ignace
    _____Josef Hofmann & Ignace Jan Paderewski Play Liszt
    __________5. Schubert-Liszt, Hark, Hark, The Lark: 3:03
    _____Paderewski Plays Concert No. 1
    __________7. Schubert-Liszt, Hark, Hark the Lark: 2:57

    Ma boucle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     for (arit = artists.begin(); arit != artists.end(); arit++) {
          a = arit->second;
          cout << "\n" << a->name;
          for (ait = a->albums.begin(); ait != a->albums.end(); ait++) {
              d = ait->second;
              cout << "\n        " << d->name<<": ";
     
              for  (sit = songs.begin(); sit != songs.end(); sit++){
                  song = sit->second;
                  cout << "\n                "<<song->track << ". "<< song->title <<": "<<song->time;
               }
              }
     }
    Ca affiche toutes les chansons pour chaque albums. je ne sais pas quoi utiliser comme pointeur dans la boucle de niveau 3, sachant que le fichier header est:

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include <stdio.h>
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    #include <sstream>
    #include <map>
     
    using namespace std;
    void findindex(string var);
    void rep(std::string &str, string c, string cr);
     
    typedef struct {
           string title;
           string mins, secs;
           int minutes, seconds;
           string time;
           string track;
    } Song;
     
    typedef struct {
           map <int, Song *> songs;
           string name;
           string genre;
           int time;
    } Album;
     
    typedef struct artist {
          map <string, Album *> albums;
          string name;
          int time;
          int nsongs;
    } Artist;
    Merci pour l'aide. (tout code serait le bienvenu)
    Fichiers attachés Fichiers attachés

  4. #4
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Il ne faut pas que tu parcoures la map songs globale, mais la map songs de l'album courant.
    Ta 3e boucle doit alors être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     for  (sit = d->songs.begin(); sit != d->songs.end(); sit++)
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  5. #5
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Points : 83
    Points
    83
    Par défaut
    Voila, ca a plus de sens quand je precise le pointeur de l'album courant (d->songs) mais je l'avais deja essayer et j'ai une erreur de compilation
    lib.cpp:57: error: no match for âoperator=â in âsit = d->Album::songs.std::map<_Key, _Tp, _Compare, _Alloc>::begin [with _Key = int, _Tp = Song*, _Compare = std::less<int>, _Alloc = std::allocator<std::pair<const int, Song*> >]()â
    /usr/include/c++/4.2/bits/stl_tree.h:153: note: candidates are: std::_Rb_tree_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Song*> >& std::_Rb_tree_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Song*> >::operator=(const std::_Rb_tree_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Song*> >&)
    lib.cpp:57: error: no match for âoperator!=â in âsit != d->Album::songs.std::map<_Key, _Tp, _Compare, _Alloc>::end [with _Key = int, _Tp = Song*, _Compare = std::less<int>, _Alloc = std::allocator<std::pair<const int, Song*> >]()â
    /usr/include/c++/4.2/bits/stl_tree.h:215: note: candidates are: bool std::_Rb_tree_iterator<_Tp>::operator!=(const std::_Rb_tree_iterator<_Tp>&) const [with _Tp = std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Song*>]
    qu'est ce qui se passe ?

  6. #6
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Il semblerait que les opérateurs != et = de la 3e boucle for ne soient pas définis, mais il y a des caractères bizarres dans tes erreurs, je ne comprends pas très bien...
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

Discussions similaires

  1. Base de donnees avec extension DAT
    Par rachid202446 dans le forum Bases de données
    Réponses: 3
    Dernier message: 04/10/2005, 10h10
  2. Probleme de auto_ptr avec les map
    Par Luther dans le forum C++
    Réponses: 8
    Dernier message: 08/04/2005, 10h49
  3. [MFC]Ouverture d'une base de donnee avec DAO
    Par Wyatt dans le forum MFC
    Réponses: 7
    Dernier message: 24/01/2005, 10h06
  4. Problème avec memory mapping
    Par gemai dans le forum C
    Réponses: 13
    Dernier message: 04/07/2003, 09h50
  5. [VB6] [ODBC] Référencer une base de données avec vb
    Par af.balog dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 13/09/2002, 09h51

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