所以下面的代码可以编译,但是我不确定它是否在执行我想要的工作...
(以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 intmap中找到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
 }

10-04 21:01