C++ 我是否使用std::map';我们能正确地找到函数吗?要访问类数据吗
所以下面的代码可以编译,但我不确定它是否做了我希望它做的事情。。。 (VS2010供参考)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
//声明
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]
modifylMap
(通过插入默认元素)当未找到与map::find
相反的元素时。注意:它不会返回null
,而是lMap.end()
。这两种行为都是未定义的行为,但后一种行为往往不会像确定的那样崩溃。lMap[p.id]
会返回NULL
。@crashmstr,实际上我用Qt-map很长时间了,如图所示,这就是错误的原因。这很有道理:)因为它是一个从服务器下载地图数据的客户端,所以它应该总是正确的,但这将对意外行为检查有很大帮助。请注意,lMap[p.id]
modifylMap
(通过插入默认元素),当未找到与map::find
相反的元素时。
QGF6::GameObject* obj = lMap[p.id];
if( obj!=nulptr){
//use it
}