0

如果我希望无序映射查找函数返回一个布尔值,我将如何去做呢?

这是我现在的代码。

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获得示例的地方

4

5 回答 5

2

tempSymbolTable->hashtable.find(lexeme)tempSymbolTable->hashtable.end()如果失败将返回,因此您可以非常简单地将此结果转换为布尔值:

return tempSymbolTable->hashtable.find(lexeme) != tempSymbolTable->hashtable.end();

此外,将其分配给临时变量并进行处理是不必要的。您的功能可以简化为:

bool NS_SymbolTable::SymbolTable::Contains(std::string lexeme)
{
    return hashtable.find(lexeme) != hashtable.end();
}
于 2011-09-21T20:03:13.253 回答
1
bool NS_SymbolTable::SymbolTable::Contains(std::string lexeme)
{
    SymbolTable *tempSymbolTable = this;
    return tempSymbolTable->hashtable.end() != tempSymbolTable->hashtable.find(lexeme);

}
于 2011-09-21T20:04:05.317 回答
1

您需要针对 tempSymbolTable->hastable.end() 测试 find 的返回值,如果它们相等,则它没有找到您的元素。find 这样工作的原因是,在当前形式下,它比只返回布尔值的东西更通用。

于 2011-09-21T20:04:23.410 回答
1

有关文档,请查看std::unordered_map::find。那里说:

将值迭代器返回到具有键 key 的元素。如果没有找到这样的元素,则返回过去(见 end())迭代器。

要获取指示元素是否存在的布尔值,请使用

bool contained = it != tempSymbolTable->hashtable.end();
于 2011-09-21T20:04:28.613 回答
0

std::unordered_map::find(),与其他标准容器的 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();
}

参考:

编辑:改变返回值的感觉。

于 2011-09-21T20:05:51.967 回答