vecteur de vecteur

vecteur de vecteur - C++ - Programmation

Marsh Posté le 10-05-2005 à 12:21:08    

Bonjour,
 
Je n'arrive pas à imaginer la structure de Grammar dans cette definition :
 
typedef vector<string> Rule;
typedef vector<Rule> Rule_collection;
typedef map<string, Rule_collection> Grammar;
 
Que contient le vecteur Rule_collection ?
Comment le remplir, le lire ?
 
Merci

Reply

Marsh Posté le 10-05-2005 à 12:21:08   

Reply

Marsh Posté le 10-05-2005 à 12:55:17    

t'as qu'à lire la doc de std::map

Reply

Marsh Posté le 10-05-2005 à 13:40:29    

Ben je vois pas le problème
 
Ton vecteur Rule_collection est une matrice (un vecteur de vecteur de String)
 
Si tu prefère c'est un tableau à 2 dimension où la première dimension symbolise les abscisses et pour chaque abscisse un tableau à 1 dimension de String lui est associé


---------------
C'est avoir tort qu'avoir raison avant les autres
Reply

Marsh Posté le 10-05-2005 à 15:48:03    

ok, mais comment accéder aux éléments ? j'ai du mal a écrire un morceau de code qui utilise cette définition

Reply

Marsh Posté le 10-05-2005 à 16:46:14    

Bonjour,
 
 Excusez-moi de m'immiscer, je ne connais pas ton langage. Mais comme te l'a fait remarquer darknagash, tu as un vecteur de vecteur. Ton langage propose certainement un accesseur direct du style "vector-ref ton_vecteur la_position".  
 
  Donc pour acceder à l'élément Mij situé à la ième ligne et jième colonne d'un matrice M, tu peux faire:

Citation :

(vector-ref(vector-ref M ligne-i) colonne-j)
Edit: un petit schéma pour t'aider:
 #( #("un"  "deux"  "trois" )
    #("quatre" "cinq" "six" )
)


 
Le premier vector-ref sera tes lignes, le deuxième, tes colonnes.Voilà. Ou l'inverse  :D  
 Vu que tu avais l'air paumé, je me suis permis. Je ne sais pas si cela t'avancera, mais normalement çà devrait être bon.
Courage.


Message édité par le_courtois le 10-05-2005 à 16:57:22
Reply

Marsh Posté le 11-05-2005 à 19:27:11    

Salut,
 Au fait, ça t'a servi...ou bien?

Reply

Marsh Posté le 11-05-2005 à 20:55:45    

ben non pas trop, je vois pas comment accéder avec les routines de le Standard Template Library

Reply

Marsh Posté le 11-05-2005 à 21:35:00    

Ben, désolé.
 Je pensais qu'en te disant le peu que je sais sur les vecteurs, ça allait t'aider. Sinon, tu n'as aucun accesseur/pointeur? directs pour les vecteurs dans ton langage? Je vais certainement dire une connerie mais peut-être qu'en voyant ça comme un tableau...?
 
  Après, je ne peux plus t'aider, franchement désolé. Bon courage.

Reply

Marsh Posté le 12-05-2005 à 00:21:08    

Salut,
 
Je me joins à Taz, pour le coup de la doc.
Mais cadeau :

Code :
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <map>
  5. using namespace std;
  6. typedef vector<string> Rule;
  7. typedef vector<Rule> Rule_collection;
  8. typedef map<string, Rule_collection> Grammar;
  9. int main(int argc, char **argv)
  10. {
  11. (void)argc;
  12. (void)argv;
  13. // Premiere collection de regle
  14. Rule premGroupe(2);
  15. premGroupe[0] = "Finit par er à l'infinitif";
  16. premGroupe[1] = "Finit par ai au passe simple, 1ere personne";
  17. Rule autreRegle(1);
  18. autreRegle[0] = "Je sais pas quoi mettre d'autre";
  19. Rule_collection collec(2);
  20. collec[0] = premGroupe;
  21. collec[1] = autreRegle;
  22. // Seconde collection de regle
  23. Rule secGroupe(2);
  24. secGroupe[0] = "Finit par ir à l'infinitif";
  25. secGroupe[1] = "Finit par issai au passe simple, 1ere personne";
  26. Rule_collection collec2(1);
  27. collec2[0] = secGroupe;
  28. // Creation de la grammaire
  29. Grammar gram;
  30. gram["tester"] = collec;
  31. gram["finir"] = collec2;
  32. // Affichage d'une grammaire
  33. Grammar::iterator gramIter = gram.begin();
  34. while( gramIter != gram.end() )
  35. {
  36.  cout << "Grammaire de \"" << (*gramIter).first << "\"" << endl;
  37.  Rule_collection::iterator colIter = (*gramIter).second.begin();
  38.  while( colIter != (*gramIter).second.end() )
  39.  {
  40.   cout << "Collection de regles" <<endl;
  41.   int i=0;
  42.   for( Rule::iterator ruleIter = (*colIter).begin();
  43.        ruleIter != (*colIter).end();
  44.        ++ruleIter, ++i )
  45.   {
  46.    cout << "Regle " << i << " : " << (*ruleIter) << endl;
  47.   }
  48.   ++colIter;
  49.  }
  50.  cout << endl;
  51.  ++gramIter;
  52. }
  53. cout << "Toutes les grammaires ont ete affichees" << endl;
  54. return 0;
  55. }


Si tu galères sur un truc, lis la doc et revient poser ta question...
 
PS: si j'ai faux, sur la grammaire, ne m'incendiez pas trop fort svp

Reply

Marsh Posté le 12-05-2005 à 08:48:28    

merci, je devrais me debrouiller

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed