c ++ map find找不到特定的Key

Lex*_*con 0 c++ map find

我正在使用地图来存储一堆键和值。我想使用 find() 来查找键并返回值。不幸的是,当我找不到钥匙时,它会很沮丧。如果找不到密钥,如何使其返回 0?

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

任何建议将不胜感激。

Jon*_*Jon 5

map::findmap::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;
} 
Run Code Online (Sandbox Code Playgroud)

为此,您需要有一个const_iterator类型为 的局部变量;但是,该类型取决于地图的模板参数(我们不知道)。所以你必须自己填补空白。

如果您正处于使用 C++11 编译器的愉快位置,那么方便

auto i = this->bagItems.find(item);
Run Code Online (Sandbox Code Playgroud)

将工作。