C++ 映射查找找不到特定键



我使用映射来存储一堆键和值。我想使用find()来查找键并返回值。不幸的是,当我找不到钥匙时,它就会心烦意乱。如果没有找到键,我如何使它返回0 ?

 int bag::getItem( const string item)
 {
    return this->bagItems.find(item)->second;
    return 0;
 }

map::find返回未找到map::end()的值。这是一个不能解引用的迭代器值,所以盲目地执行bagItems.find(item)->second是不允许的。

相反,检查返回值并采取相应的操作:

int bag::getItem( const string item) 
{ 
    // We don't know what CONST_ITERATOR_TYPE is, but you do
    CONST_ITERATOR_TYPE i = this->bagItems.find(item);
    return i == this->bagItems.end() ? 0 : i->second;
} 

要做到这一点,你需要有一个const_iterator类型的局部变量;然而,该类型取决于映射的模板参数(我们不知道)。所以你必须自己填补空白。

如果您喜欢使用c++ 11编译器,那么方便的

auto i = this->bagItems.find(item);

你必须检查返回值(它是一个迭代器),如果它发现了什么:

int bag::getItem(const string & item) const
{
    map<string, int>::const_iterator iter = this->bagItems.find(item);
    return iter != this->bagItems.end() ? iter->second: 0;
}

您应该在getItem()方法中添加检查,以查看对find()的调用是否返回bagItems.end()。

int bag::getItem( const string item)
{
map::const_iterator iter =  this->bagItems.find(item); //correct type here ;]
if(iter != this.bagItems.end())
    return iter->second;
return 0;
}

必须检查迭代器是否位于容器的末尾

int bag::getItem( const string item)
 {
  {the type of bagItems}::const_iterator it ;
  it = bagItems.find(item) ;
  if ( it == bagItems.end()) {
    return 0;
  } else  {
      return bagItems.find(item)->second;
  }
 }

最新更新