使用无序映射查找功能

发布于 2024-12-05 19:41:52 字数 549 浏览 2 评论 0原文

如果我希望无序映射查找函数返回 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

If I want the unordered map find function to return a bool value, how would I go about doing that?

Here's my code right now.

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

What else do I neeed to do ? Is it possible to return a bool? There is little to no documentation on this that I have found.

This is where I got an example from http://msdn.microsoft.com/en-us/library/bb982431.aspx

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

柠檬 2024-12-12 19:41:52

如果失败, 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();
}

tempSymbolTable->hashtable.find(lexeme) will return tempSymbolTable->hashtable.end() if it fails, so you can convert this result to a bool very simply:

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

Also, assigning this to a temporary variable and working through that is unnecessary. Your function can be reduced to:

bool NS_SymbolTable::SymbolTable::Contains(std::string lexeme)
{
    return hashtable.find(lexeme) != hashtable.end();
}
笨死的猪 2024-12-12 19:41:52

有关文档,请参阅 std::unordered_map::find。那里说:

返回值
具有 key key 的元素的迭代器。如果没有找到这样的元素,则返回尾后(参见 end())迭代器。

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

bool contained = it != tempSymbolTable->hashtable.end();

For documentation look std::unordered_map::find. There it says:

Return value
iterator to an elements with key key. If no such element is found, past-the-end (see end()) iterator is returned.

To get boolean value indicating whether an element is present, use

bool contained = it != tempSymbolTable->hashtable.end();
月牙弯弯 2024-12-12 19:41:52
bool NS_SymbolTable::SymbolTable::Contains(std::string lexeme)
{
    SymbolTable *tempSymbolTable = this;
    return tempSymbolTable->hashtable.end() != tempSymbolTable->hashtable.find(lexeme);

}
bool NS_SymbolTable::SymbolTable::Contains(std::string lexeme)
{
    SymbolTable *tempSymbolTable = this;
    return tempSymbolTable->hashtable.end() != tempSymbolTable->hashtable.find(lexeme);

}
你げ笑在眉眼 2024-12-12 19:41:52

您需要根据 tempSymbolTable->hastable.end() 测试 find 的返回值,如果它们相等,则它没有找到您的元素。 find 之所以如此工作,是因为它当前的形式比仅返回 bool 的东西更通用。

You need to test the return value of find against tempSymbolTable->hastable.end(), if they are equal then it did not find your element. The reason find works like this is because in its current form it is more general than something that returns only a bool.

撩动你心 2024-12-12 19:41:52

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

参考:

编辑:改变返回值的意义。

std::unordered_map::find(), like the rest of the standard containers' find functions, returns end() on failure.

Try this:

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

Reference:

EDIT: change sense of return value.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文