C++ 映射查找找不到特定键
c++ map find can't find specific Key
我使用映射来存储一堆键和值。我想使用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;
}
}
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 找不到QtResource文件中的文件
- VC++本机单元测试,找不到调试符号
- RegGetValue在当前用户下找不到名称
- 带有 -stdlib=libc++ 的 clang++ 9.0.1 找不到<optional>
- c++找不到具有相同哈希的无序集合元素
- c++ 嵌套结构映射找不到成员
- C++ 映射缓存找不到条目
- C++ STL 比较映射找不到(运算符==)
- C++ for_each循环找不到指向映射元素
- 语法错误:html 映射文件中的解析错误 - ogmaps 引用错误:找不到变量:GUnload
- 打开文件映射问题,找不到文件映射
- 找不到 C++ 映射 [] 运算符
- 使用自己的比较器运算符()进行映射<>。在找不到 KEY 的情况下给出错误
- 是什么原因导致clang找不到无序映射标头
- C++ 映射查找找不到特定键