Bonjour,
J'ai un programme dans lequel je dois présenter des données d'une autre façon et je galère un peu! Voici mon problème:
- Les données de base "donneesEntree" ont été enregistrées dans un tableau de structures:
Il s'agit de données récupérées dans un fichier, chaque élément de mon vector correspondant à une ligne du fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 struct base { int idTrack; int numsPhases[4]; [... autres parametres qui ne concernent pas le probleme] }; vector<struct base> donneesEntree;
Dans une ligne de fichier, je récupère donc le idTrack (qui peut valoir entre 1 et 4) ainsi que 4 numéros de phases. Les numéros de phase ont un rang et sont enregistrés par ordre de rang dans le tableau numsPhases. Il n'y a pas forcément 4 numéros de phases "utiles" (entier >0), il peut y en avoir moins (mais au moins 1); dans ce cas les autres cases du tableau valent 0. Exemple de ce à quoi ressemble le fichier:
- Je veux rassembler ces données dans "tracks" de la manière suivante pour pouvoir effectuer des traitement ensuite:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 NumTrack PhaseRang1 PhaseRang2 PhaseRang3 PhaseRang4 1 12345 65278 0 0 2 54698 0 0 0 1 54861 65278 6983 0 1 54861 0 6983 0 [...]
Je veux donc, pour chaque "Track", obtenir une liste de structures "phasesReorg", une pour chaque couple [rang, numPhase]. Par exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 struct reorg { int idTrack; [... autres parametres qui ne concernent pas le probleme] vector<struct phaseReorg> phases; }; struct phaseReorg{ int rang; int numPhase; [... autres parametres qui ne concernent pas le probleme] }; struct reorg tracks[4];
Track1:
Rang 1 Phase 123456
Rang 1 Phase 54861
Rang 2 Phase 65278
Rang 3 Phase 6983
[Pas de rang 4 car tous les numeros de phase de rang 4 pour ce Track valent 0 dans le fichier]
[Même principe pour Track 2, 3 et 4]
Voilà pour le problème j'espère l'avoir expliqué clairement!
Voici un début de solution que j'ai codé:
J'ai créé un vecteur à 3 dimensions intermédiaire car je ne vois pas comment passer directement d'une structure "vector<donneesEntrees>" à une structure "struct reorg tracks[4]". Avec ce vecteur j'ai donc, pour chaque Track, puis pour chaque Rang, la liste des numéros de phase correspondant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 vector <vector <vector <int> > > phases; for (int iTrack=0; iTrack < 4; iTrack++) { vector<vector <int> > phasesTrack; vector<int> phasesRang; for(int rang=0; rang<4; rang++) phasesTrack.push_back(phasesRang); for(unsigned ligneFic = 0; ligneFic < donneesEntree.size(); ligneFic++) if(donneesEntree[ligneFic].idTrack == iTrack+1) for(int rang=0; rang <4; rang++) phasesTrack[rang].push_back(donneesEntree[i].phase[rang]); phases.push_back(phasesTrack); }
A priori à partir de ce vecteur je vais pouvoir remplir ma structure tracks (sachant qu'il faudra que je supprime les doublons car il peut y avoir plusieurs fois le même couple [rang, phase] pour piste donnée tel que j'ai codé cela).
Cependant je pense que cette solution est très mocheje n'aime pas le vecteur à 3 dimensions, mais je ne vois pas trop comment faire autrement! En plus je pense que je m'y prends mal pour initialiser mes vecteurs. Je pense qu'il existe des solutions plus élégantes, j'ai vu des exemples utilisant une classe template notamment mais je n'ai pas trop compris comment ça fonctionne...
Pouvez-vous me donner des pistes?
Merci d'avance![]()
Partager