如果我希望无序地图查找函数返回bool值,我该怎么做呢?
这是我现在的代码。
bool NS_SymbolTable::SymbolTable::Contains(std::string lexeme)
{
SymbolTable *tempSymbolTable = this;
std::unordered_map<std::string, Identifier*>::iterator it = tempSymbolTable->hashtable.find(lexeme);
return std::boolalpha;
}
我还需要做什么?是否可以归还一个布尔?我找到的文件几乎没有。
得到一个例子的地方答案 0 :(得分:2)
tempSymbolTable->hashtable.find(lexeme)
如果失败则会返回tempSymbolTable->hashtable.end()
,因此您可以非常简单地将此结果转换为bool:
return tempSymbolTable->hashtable.find(lexeme) != tempSymbolTable->hashtable.end();
此外,将此分配给临时变量并完成该操作是不必要的。您的功能可以简化为:
bool NS_SymbolTable::SymbolTable::Contains(std::string lexeme)
{
return hashtable.find(lexeme) != hashtable.end();
}
答案 1 :(得分:1)
bool NS_SymbolTable::SymbolTable::Contains(std::string lexeme)
{
SymbolTable *tempSymbolTable = this;
return tempSymbolTable->hashtable.end() != tempSymbolTable->hashtable.find(lexeme);
}
答案 2 :(得分:1)
你需要测试find对tempSymbolTable-&gt; hastable.end()的返回值,如果它们相等则它找不到你的元素。之所以找到这样的原因,是因为它的当前形式比只返回bool的东西更通用。
答案 3 :(得分:1)
有关文档,请查看std::unordered_map::find。它说:
返回值 迭代器到具有键键的元素。如果没有找到这样的元素,则返回past-the-end(参见end())迭代器。
要获取指示元素是否存在的布尔值,请使用
bool contained = it != tempSymbolTable->hashtable.end();
答案 4 :(得分:0)
std::unordered_map::find()
会在失败时返回end()
。
试试这个:
bool NS_SymbolTable::SymbolTable::Contains(std::string lexeme)
{
SymbolTable *tempSymbolTable = this;
std::unordered_map<std::string, Identifier*>::iterator it =
tempSymbolTable->hashtable.find(lexeme);
return it != tempSymbolTable->hashtable.end();
}
参考:
编辑:改变回报价值。