我正在使用C++ std :: map来保存大量实体:
using std::map;
map {structureEntityID, classEntityRecord} tableEntityRecords; //(replace {}s with arrows)
Run Code Online (Sandbox Code Playgroud)
我会经常修改表格中的实体(每秒多次).通过指针修改这些记录是更好还是更好地制作本地副本,修改它,然后更新表?
例如...
通过指针:
classEntityRecord* getEntityRecord(structureEntityID entityID)
{
map {structureEntityID, classEntityRecord}::iterator iteratorEntityRecord;
iteratorEntityRecord = tableEntityRecords.find(entityID);
return &iteratorEntityRecord->second;
}
classEntityRecord *entityRecord;
entityRecord = getEntityRecord(entityID);
entityRecord->x = 15;
Run Code Online (Sandbox Code Playgroud)
通过复制/修改/更新:
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;
Run Code Online (Sandbox Code Playgroud)
我认为最好使用指针,但这是我第一次使用C++地图,所以我不完全了解它们是如何工作的.
我最担心的是,如果我指向表中的一个值,是否有可能重新排序C++映射并使该指针不再有效?该程序是多线程的,因此可以将实体添加到表中,而其他实体则被修改.
我很感激帮助!