C++ 我是否使用std::map';我们能正确地找到函数吗?要访问类数据吗

C++ 我是否使用std::map';我们能正确地找到函数吗?要访问类数据吗,c++,stl,c++98,C++,Stl,C++98,所以下面的代码可以编译,但我不确定它是否做了我希望它做的事情。。。 (VS2010供参考) //声明 typedef std::map localMap; 本地地图; //我可能使用错误逻辑的函数中的代码: lMap.find(p.id)->second->getPhysics()->setLinearVelocity(linVel); 预期逻辑: 在map中找到等于p.id的unsigned int值(另一个unsigned int),然后找到map的成员,访问它的第二个数据类型(GameO

所以下面的代码可以编译,但我不确定它是否做了我希望它做的事情。。。 (VS2010供参考)

//声明
typedef std::map localMap;
本地地图;
//我可能使用错误逻辑的函数中的代码:
lMap.find(p.id)->second->getPhysics()->setLinearVelocity(linVel);
预期逻辑:

map
中找到等于
p.id
unsigned int
值(另一个unsigned int),然后找到
map
的成员,访问它的第二个数据类型(
GameObject*
)并执行其他操作



所以问题是这是否应该“按预期”起作用?它可以编译,但由于velocity有bug,我认为这可能是对std::map类的误解。

只有当搜索的项目实际存在于
map
中时,这才有效。否则,使用它将导致未定义的行为。您应该使用如下内容

 std::map<unsigned int, QGF6::GameObject*>::iterator itr = lMap.find(p.id);
 if(itr!= lMap.end()){ //found
  //use it
 }

仅当搜索的项目实际存在于
映射中时,该操作才有效。否则,使用它将导致未定义的行为。您应该使用如下内容

 std::map<unsigned int, QGF6::GameObject*>::iterator itr = lMap.find(p.id);
 if(itr!= lMap.end()){ //found
  //use it
 }

UB if element(
p.id
)未找到。UB if element(
p.id
)未找到。注意:它不会返回
null
,而是
lMap.end()
。这两种行为都是未定义的行为,但后一种行为往往不会像确定的那样崩溃。
lMap[p.id]
会返回
NULL
。@crashmstr,实际上我用Qt-map很长时间了,如图所示,这就是错误的原因。这很有道理:)因为它是一个从服务器下载地图数据的客户端,所以它应该总是正确的,但这将对意外行为检查有很大帮助。请注意
lMap[p.id]
modify
lMap
(通过插入默认元素)当未找到与
map::find
相反的元素时。注意:它不会返回
null
,而是
lMap.end()
。这两种行为都是未定义的行为,但后一种行为往往不会像确定的那样崩溃。
lMap[p.id]
会返回
NULL
。@crashmstr,实际上我用Qt-map很长时间了,如图所示,这就是错误的原因。这很有道理:)因为它是一个从服务器下载地图数据的客户端,所以它应该总是正确的,但这将对意外行为检查有很大帮助。请注意,
lMap[p.id]
modify
lMap
(通过插入默认元素),当未找到与
map::find
相反的元素时。
 QGF6::GameObject* obj = lMap[p.id];
 if( obj!=nulptr){
  //use it
 }