3 votes

Dois-je manipuler la valeur d'une carte C++ via un pointeur ou en mettant à jour l'enregistrement ?

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 !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X