所以下面的代码可以编译,但是我不确定它是否在执行我想要的工作...
(以VS2010为参考)
// Declarations
typedef std::map<unsigned int, QGF6::GameObject*> localMap;
localMap lMap;
// Code in a function that I might be using with the wrong logic:
lMap.find(p.id)->second->getPhysics()->setLinearVelocity(linVel);
预期逻辑:
在等于
unsigned int
的map
中找到p.id
值(另一个无符号的int),然后找到map
的那个成员,访问它的第二个数据类型(GameObject*
)并执行操作。所以问题是,这是否应该“按预期”工作?它可以编译,但是当我遇到速度错误时,我认为这可能是对std :: map类的误解。
最佳答案
仅当map
中实际存在所搜索的项目时,该方法才有效。否则使用它将导致不确定的行为。您应该使用类似以下的内容
std::map<unsigned int, QGF6::GameObject*>::iterator itr = lMap.find(p.id);
if(itr!= lMap.end()){ //found
//use it
}
要么,
QGF6::GameObject* obj = lMap[p.id];
if( obj!=nulptr){
//use it
}