地图值的地址

Max*_*rai 4 c++ pointers map

我有一个存储的设置std::map.例如,有值的WorldTime键可以更新每个主循环迭代.我不想在我需要时从地图上读取它(它也在每帧处理),我认为它根本不快.那么,我可以获得指向地图值的指针并访问它吗?代码是:

std::map<std::string, int> mSettings;

// Somewhere in cycle:
mSettings["WorldTime"] += 10; // ms

// Somewhere in another place, also called in cycle
DrawText(mSettings["WorldTime"]); // Is slow to call each frame
Run Code Online (Sandbox Code Playgroud)

所以这个想法是这样的:

int *time = &mSettings["WorldTime"];

// In cycle:
DrawText(&time);
Run Code Online (Sandbox Code Playgroud)

怎么了?我应该这样做吗?

Ker*_* SB 6

最好用一个参考:

int & time = mSettings["WorldTime"];
Run Code Online (Sandbox Code Playgroud)

如果密钥尚不存在,则[]-access将创建元素(并对映射值进行值初始化,即0对于a int).或者(如果密钥已存在):

int & time = *mSettings.find("WorldTime");
Run Code Online (Sandbox Code Playgroud)

顺便说一句:如果你有成千上万的字符串键或者按字符串键使用查找很多,你可能会发现a std::unordered_map<std::string, int>给出了更好的结果(但总是在决定之前进行配置).这两个地图具有几乎相同的接口,可满足您的需求


Mar*_*som 5

根据StackOverflow上的这个答案,存储指向地图元素的指针是完全可以的,因为在删除元素之前它不会失效(请参阅注释 3)。