J'utilise une std::map C++ pour contenir une grande collection d'entités :
using std::map;
map {structureEntityID, classEntityRecord} tableEntityRecords; //(replace {}s with arrows)
Je vais fréquemment modifier les entités de ma table (plusieurs fois par seconde). Est-il préférable de modifier ces enregistrements via un pointeur ou de faire une copie locale, de la modifier, puis de mettre à jour la table ?
Par exemple...
Via un pointeur :
classEntityRecord* getEntityRecord(structureEntityID entityID)
{
map {structureEntityID, classEntityRecord}::iterator iteratorEntityRecord;
iteratorEntityRecord = tableEntityRecords.find(entityID);
return &iteratorEntityRecord->second;
}
classEntityRecord *entityRecord;
entityRecord = getEntityRecord(entityID);
entityRecord->x = 15;
Via une copie/modification/mise à jour :
classEntityRecord getEntityRecord(structureEntityID entityID)
{
map {structureEntityID, classEntityRecord}::iterator iteratorEntityRecord;
iteratorEntityRecord = tableEntityRecords.find(entityID);
return iteratorEntityRecord->second;
}
classEntityRecord entityRecord;
entityRecord = getEntityRecord(entityID);
entityRecord.x = 15;
tableEntityRecords[entityID] = entityRecord;
Je pense qu'il est préférable d'utiliser un pointeur, mais c'est la première fois que j'utilise des cartes C++ et je ne comprends pas bien comment elles fonctionnent.
Ma grande inquiétude est que si je prends un pointeur vers l'une des valeurs de ma table, est-il possible que la carte C++ soit réorganisée et que ce pointeur ne soit plus valide ? Le programme étant multithread, des entités peuvent être ajoutées à la table pendant que d'autres sont en cours de modification.
J'apprécie l'aide !