使用无序地图查找功能

时间:2011-09-21 19:58:56

标签: c++ find unordered-map

如果我希望无序地图查找函数返回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;
    }

我还需要做什么?是否可以归还一个布尔?我找到的文件几乎没有。

这是我从http://msdn.microsoft.com/en-us/library/bb982431.aspx

得到一个例子的地方

5 个答案:

答案 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)

与其他标准容器的find函数一样,

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();
}

参考:

编辑:改变回报价值。