Bonjour

Je cherche à manipuler très rapidement un tableau 2D dont la colonne 1 serait fixe et la 2d dynamique -dans l'idéal-, de manière à associer à une mollécule (col 1) un nombre variable de particules (col 2), ajoutées et supprimées à la volée...
Cette opération ayant lieu de nombreuses fois et pendant d'autres calculs, tels que des collisions 3D gérées par un moteur de physique, je me suis tourné vers Boost en pensant gagner en performances.

Auriez-vous quelques conseils ?

A quel point un tableau fixe est-il + rapide qu'un dynamique, quitte à laisser bcp de cases vides ?

Pour l'instant j'essaie d'utiliser un multi_array , mais je n'arrive pas à ajouter correctement des valeurs à un emplacement précis :


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
typedef boost::multi_array<int, 2> array_type;
typedef array_type::index index;
int cl1 = 10;
int cl2 = 50;
array_type molles_A(boost::extents[cl1][cl2]);

...

void ajouter(int idMol, int idA, int idB)
{

int nextPos = //? comment évaluer la position suivant le dernier élément ajouté ?
molles_A[idMol][nextPos] = idA;
molles_A[idMol][nextPos] = idB;

}

void supprimer(id)
{
for(index i = 0; i != cl1; ++i)
    for(index j = 0; j != cl2; ++j)
       if( molles_A[i][j]  == id )
molles_A[i][j] = NULL;
 break;
}
J'épluche encore la doc mais pourriez vous m'aider à trouver la formulation pour nextPos

Que pensez vous de la manière de supprimer() un élément ?

merci