使用map :: find查找键并返回值

时间:2016-04-30 05:29:20

标签: c++ for-loop dictionary iterator find

我的目标是寻找一个Key(objName),如果它存在则返回值。

GameEntity * GameEntity::FindInContents(string objName)
{
   for( map<string, GameEntity*>:: iterator iter = contents.begin(); iter != contents.end(); iter++)
    {
       if(contents.find(objName)== contents.end())
           return (iter->second);
       else
           return NULL;
    }
}

然而,当我运行代码时,它将我带到

/** There is also a templated copy ctor for the @c pair class itself.  */
#ifndef __GXX_EXPERIMENTAL_CXX0X__
  template<class _U1, class _U2>
pair(const pair<_U1, _U2>& __p)
: first(__p.first), second(__p.second) { }
#else

我不明白这个问题是什么。提前谢谢!

2 个答案:

答案 0 :(得分:3)

不需要循环,因为find返回找到的元素的迭代器或end(),如果不匹配。

所以你需要的只是:

map<string, GameEntity*>:: iterator iter = contents.find(objName);
if(iter != contents.end())  // notice the !=
    return (iter->second);
else
    return NULL;

有关详细信息,请参阅http://en.cppreference.com/w/cpp/container/map/find

答案 1 :(得分:0)

为什么世界上你在使用for循环?

试试这个:

NULL

(注意:不推荐使用nullptr宏,而是使用obtainedList。)