Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2831 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Map multiples

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Map multiples

n°457562
haazheel
Posté le 14-07-2003 à 22:05:32  profilanswer
 

Hello,
 
voici mon problème:
 
j'ai les maps suivantes:
 

Code :
  1. typedef vector<int> ListeFrames;
  2.         typedef map<AnsiString, ListeFrames> ActionsUneStat;
  3.         typedef map<AnsiString, ActionsUneStat> ToutesActions;
  4.         typedef ToutesActions::iterator ite;
  5.        
  6.         ToutesActions TA;


 
Qui correspond à l'exemple suivant:
 

Citation :


Joueur1 -> Stat -> Frame
                -> Frame
                -> Frame
                -> Frame
                -> ...
        -> Stat
        -> ...
Joueur2 -> Stat -> Frame
...
...


 
Je remplis tout ça grâce à des boucles récursives qui récupèrent les infos dans un fichier XML (Je donne le code quand même)
 

Code :
  1. XML->Clear();
  2. XML->Push(0);
  3. //On scanne\\
  4. //Les équipes
  5. for (int i=0; i < 2; i++)
  6. {
  7.         XML->Modify(i);
  8.         XML->Push("Staff" );
  9.         int NbreJoueurs = XML->GetCount();
  10.         XML->Push(0);
  11.         //Les joueurs
  12.         for (int j=0; j < NbreJoueurs; j++)
  13.         {
  14.                 XML->Modify(j);
  15.                 AnsiString NomJoueur = XML->GetAttr("Nom" );
  16.                 ActionsUneStat AUS;
  17.                 XML->Push(0);
  18.                 //Les groupes de stats
  19.                 for (int k=0; k < NbreStats; k++)
  20.                 {
  21.                         XML->Modify(k);
  22.                         AnsiString NomStat = XML->GetName();
  23.                         int NbreStatsIndiv = XML->GetCount();
  24.                         //On réserve tout de suite le nombre d'actions
  25.                         ListeFrames LF(NbreStatsIndiv,0);
  26.                         if (NbreStatsIndiv > 0)
  27.                                 XML->Push(0);
  28.                         //Les stats individuellement
  29.                         for (int l=0; l < NbreStatsIndiv; l++)
  30.                         {
  31.                                 XML->Modify(l);
  32.                                 int TpsAction = StrToInt(XML->GetValue());
  33.                                 //On ajoute les actions
  34.                                 LF[l] = TpsAction;
  35.                         }
  36.                         //On ajoute une entrée Stat
  37.                         AUS.insert(ActionsUneStat::value_type(NomStat,LF));
  38.                         if (NbreStatsIndiv > 0)
  39.                                 XML->Delete();
  40.                 }
  41.                 //On ajoute une entrée joueur
  42.                 TA.insert(ToutesActions::value_type(NomJoueur,AUS));
  43.                 XML->Delete();
  44.         }
  45.         XML->Delete(2);
  46. }


 
Maintenant je voudrais récupérer les données grâce à des critères de recherche sur le ou les joueurs et sur la ou les stats...
 
Il y a la fonction find() qui renvoie un iterateur, mais je n'arrive qu'à chercher un joueur, et pas parmi ses stats...
 
Je fais comment pour avoir la liste des Frames pour une stat voulue pour un joueur voulu?
 
Merci d'avance  :jap:


---------------
Another .Net Blog
mood
Publicité
Posté le 14-07-2003 à 22:05:32  profilanswer
 

n°457571
Taz
bisounours-codeur
Posté le 14-07-2003 à 22:21:00  profilanswer
 

hein? on comprends rien là? pose nous un problème de C++ et pas tin histoire de basketteurs

n°457633
haazheel
Posté le 14-07-2003 à 23:15:22  profilanswer
 

lol, c'est dur d'expliquer ce que je voudrais
 
Donc en gros mes maps sont remplies des infos voulues.
 
Ex:
 

 
"Jordan" -> "Lancers-Francs" -> 15
                             -> 48  
                             -> 67
                             -> 165
         -> "Rebonds" -> 34
                      -> 100  
         -> ...  
Joueur2 -> Stat -> Frame  
...  
...  


 
Maintenant ce que je voudrais, c'est obtenir tous les lancers-francs de Jordan...
 
Si je fais:

Code :
  1. ToutesActions::iterator I = TA.find("Jordan" );


 
Il me met l'iterateur sur Jordan, mais comment faire pour parcourir les stats (Lancers-Francs...) ainsi que les instants des Stats (15,48...)??


---------------
Another .Net Blog
n°457677
Konar
Posté le 14-07-2003 à 23:48:15  profilanswer
 

te répondrais bien juste "std::pair", mais chuis dans un bon jour, alors voila un exemple :
 

Code :
  1. // Get "jordan"
  2. ToutesActions::const_iterator i = TA.find("Jordan" );
  3. if (i != TA.end())
  4. {
  5.  const pair<string, ActionsUneStat> &Paire = *i;
  6.  const ActionsUneStat &Konar = Paire.second;
  7.  // Get "Lancers-Francs"
  8.  ActionsUneStat::const_iterator j = Konar.find("Lancers-Francs" );
  9.  if (j !=  Konar.end())
  10.  {
  11.   const ListeFrames &Frames = j->second;
  12.   // List all
  13.   for (ListeFrames::const_iterator k = Frames.begin(); k != Frames.end(); k++)
  14.   {
  15.    *k; // l'int
  16.   }
  17.  }
  18. }


 
c'est pas la solution la + élégante, mais ca te detaille bien tout ton bordel.


Message édité par Konar le 15-07-2003 à 00:01:58
n°457713
haazheel
Posté le 15-07-2003 à 00:08:26  profilanswer
 

Merci beaucoup, ça marche effectivement très bien...
 
Néanmoins j'ai quelques questions:
 
C'est obligé de mettre des const?
 
Quelle serait une solution plus élégante?
 
J'ai déjà une classe qui pourrait me servir ici:
 

Code :
  1. struct ContenuUneStatUnXML
  2. {
  3. private:
  4.         vector<int> VecUneStatUnXML; //Contient chaque Frame
  5. public:
  6.         AnsiString NomStat;
  7.        
  8. //Les fonctions qui vont bien
  9. //...
  10. };


 
Dans ce cas ça ne serait pas préférable de modifier mes typedef comme suit?
 

Code :
  1. typedef vector<ContenuUneStatUnXML> VCUSUX
  2. typedef map<AnsiString, VCUSUX> ToutesActions;
  3. ToutesActions TA;


 
Je n'aurais que quelques modifs à apporter à ton code...
 


---------------
Another .Net Blog

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Map multiples

 

Sujets relatifs
[C++/QT] Eviter les instances multiples d'un programme ?include multiples
[PHP] récupérer valeurs multiples d'un checkbox dans un formulaire[Borland C++ Builder 6] Lenteur des insertions multiples avec ADO
[délimitanion de lien ! BEURK !] Utilisation MAP, oki, mais pb d'estheProjet C++ : Création et utilisation d'objets multiples
Comparaisons multiples[OpenGL] Création de Map pour un jeu en 3D
Détecter les inscriptions multiples[ Prog C ] Probleme avec les includes multiples...
Plus de sujets relatifs à : Map multiples


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)