我正在使用地图来存储一堆键和值。我想使用 find() 来查找键并返回值。不幸的是,当我找不到钥匙时,它会很沮丧。如果找不到密钥,如何使其返回 0?
int bag::getItem( const string item)
{
return this->bagItems.find(item)->second;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
任何建议将不胜感激。
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;
}
Run Code Online (Sandbox Code Playgroud)
为此,您需要有一个const_iterator
类型为 的局部变量;但是,该类型取决于地图的模板参数(我们不知道)。所以你必须自己填补空白。
如果您正处于使用 C++11 编译器的愉快位置,那么方便
auto i = this->bagItems.find(item);
Run Code Online (Sandbox Code Playgroud)
将工作。
归档时间: |
|
查看次数: |
4515 次 |
最近记录: |