OVH Cloud OVH Cloud

Choix de conteneur

5 réponses
Avatar
Michaël Delva
Bonsoir à tous,

je fais appel à vos services pour m'aider à résoudre le problème suivant:

j'ai la classe suivante, qui correspond à une possession pour un joueur
d'un match de basket. Je stocke tout ça dans un vecteur.

struct AD_Possessions
{
AnsiString nom_equipe,
nom_joueur;

SJ_Sequence possession;

bool operator==(const AD_Possessions & compar) const;

__fastcall AD_Possessions(const AnsiString & nom_equipe,const
AnsiString & nom_joueur,const SJ_Sequence & possession);

bool operator< (const AD_Possessions & compar) const
{ return possession < compar.possession; }
};

J'ai donc la structure suivante:

equipe - joueur - SJ_Sequence
equipe - joueur - SJ_Sequence
equipe - joueur - SJ_Sequence
equipe - joueur - SJ_Sequence


Le problème est qu'il y a deux équipes, avec au moins 100 possessions
chacune, et 5 joueurs par possession, ce qui nous fait au moins 1000
éléments dans le vecteur, ce qui ralentit les insertions et les
recherches dans ce vecteur. Je ne parle pas de la taille en mémoire,
parce que j'en ai aucune idée.

Je me posais donc la question de savoir s'il ne serait pas mieux
d'utiliser une structure du type:

std::map<AnsiString,std::vector<SJ_Sequence> > sequences_un_joueur;
std::map<AnsiString,sequences_un_joueur> sequences_une_equipe;

Ce qui donnerait une structure du type:

equipe
|
|
|----> Joueur
| |
| |----> SJ_Sequence
| |
| |----> SJ_Sequence
|
|----> Joueur
|
.......

Quelle méthode vous me conseilleriez?

Merci d'avance...

5 réponses

Avatar
Fabien LE LEZ
On 01 Mar 2004 00:29:58 GMT, "Michaël Delva"
wrote:

Le problème est qu'il y a deux équipes, avec au moins 100 possessions
chacune, et 5 joueurs par possession, ce qui nous fait au moins 1000
éléments dans le vecteur, ce qui ralentit les insertions et les
recherches dans ce vecteur.


As-tu effectivement mesuré un ralentissement notable ?
Pour le problème de ralentissement à l'insertion, utiliser deque<> à
la place de vector<> devrait arranger les choses sans changer
grand-chose à ton programme.

--
;-)

Avatar
Michaël Delva
Fabien LE LEZ wrote in
news::

On 01 Mar 2004 00:29:58 GMT, "Michaël Delva"
wrote:

Le problème est qu'il y a deux équipes, avec au moins 100 possessions
chacune, et 5 joueurs par possession, ce qui nous fait au moins 1000
éléments dans le vecteur, ce qui ralentit les insertions et les
recherches dans ce vecteur.


As-tu effectivement mesuré un ralentissement notable ?
Pour le problème de ralentissement à l'insertion, utiliser deque<> à
la place de vector<> devrait arranger les choses sans changer
grand-chose à ton programme.



OK, j'essaierai ça tout à l'heure...

Mais en ce qui concerne l'utilisation même, quelle méthode choisirais-tu?


Avatar
Fabien LE LEZ
On 01 Mar 2004 10:03:29 GMT, "Michaël Delva"
wrote:

Mais en ce qui concerne l'utilisation même, quelle méthode choisirais-tu?


Je n'en sais pas assez sur ton programme pour faire un choix à ta
place.
Toutefois, je déconseille les "typedef std::map<...> Machin" (sauf
peut-être dans un programme de test) : ce n'est pas assez souple, tu
risques assez vite de te retrouver coincé.
--
;-)

Avatar
Gourgouilloult

J'ai donc la structure suivante:

equipe - joueur - SJ_Sequence
equipe - joueur - SJ_Sequence
equipe - joueur - SJ_Sequence
equipe - joueur - SJ_Sequence


ou

Ce qui donnerait une structure du type:

equipe
|
|
|----> Joueur
| |
| |----> SJ_Sequence
| |
| |----> SJ_Sequence
|
|----> Joueur
|
.......

Quelle méthode vous me conseilleriez?


Ca dépend essentiellement de l'intérêt de la chronologie du match dans
le traitement que tu fais des données. Si c'est le cas, la deuxième
structure non seulement risque de t'obliger à rajouter des champs dans
SJ_Sequence, mais va surtout rendre la reconstitution de l'ordre très
laborieuse (et passer de toute façon par un conteneur linéaire)... comme
dit Fabien : on en sait pas assez.

Gourgou
(C'juste un exemple, quoi)

Avatar
Michaël Delva
Gourgouilloult <gourgou_at_club-internet_point_fr> wrote in news:404335bf$0
$5918$:

Ca dépend essentiellement de l'intérêt de la chronologie du match dans
le traitement que tu fais des données. Si c'est le cas, la deuxième
structure non seulement risque de t'obliger à rajouter des champs dans
SJ_Sequence, mais va surtout rendre la reconstitution de l'ordre très
laborieuse (et passer de toute façon par un conteneur linéaire)... comme
dit Fabien : on en sait pas assez.

Gourgou
(C'juste un exemple, quoi)




Oui c'est vrai...

Je vais garder ça tel quel...