小编Cli*_*int的帖子

我应该通过指针操作C++地图的值还是更新记录?

我正在使用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++映射并使该指针不再有效?该程序是多线程的,因此可以将实体添加到表中,而其他实体则被修改.

我很感激帮助!

c++ pointers stl map

2
推荐指数
1
解决办法
2368
查看次数

标签 统计

c++ ×1

map ×1

pointers ×1

stl ×1