Я использую C ++ std :: map для хранения большой коллекции сущностей:
using std::map;
map {structureEntityID, classEntityRecord} tableEntityRecords; //(replace {}s with arrows)
Я буду часто изменять сущности в моей таблице (много раз в секунду). Лучше изменить эти записи с помощью указателя или лучше сделать локальную копию, изменить ее, а затем обновить таблицу?
Например ...
Через указатель:
classEntityRecord* getEntityRecord(structureEntityID entityID)
{
map {structureEntityID, classEntityRecord}::iterator iteratorEntityRecord;
iteratorEntityRecord = tableEntityRecords.find(entityID);
return &iteratorEntityRecord->second;
}
classEntityRecord *entityRecord;
entityRecord = getEntityRecord(entityID);
entityRecord->x = 15;
Посредством копирования / изменения / обновления:
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;
Я думаю, что лучше использовать указатель, но я впервые использую карты C ++, поэтому я не до конца понимаю, как они работают.
Мое большое беспокойство вызывает то, что, если я возьму указатель на одно из значений в моей таблице, возможно ли переупорядочить карту C ++ и этот указатель больше не будет действительным? Программа является многопоточной, поэтому объекты могут быть добавлены в таблицу, в то время как другие изменяются.
Я ценю помощь!