C++ 使用无序映射查找函数

C++ 使用无序映射查找函数,c++,find,unordered-map,C++,Find,Unordered Map,如果我想让无序的map find函数返回bool值,我该怎么做呢 这是我的密码 bool NS_SymbolTable::SymbolTable::Contains(std::string lexeme) { SymbolTable *tempSymbolTable = this; std::unordered_map<std::string, Identifier*>::iterator it = tempSymbolTable->ha

如果我想让无序的map find函数返回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;
    }
bool NS\u SymbolTable::SymbolTable::Contains(std::string lexeme)
{
SymbolTable*tempSymbolTable=此;
std::unordered_map::iterator it=tempSymbolTable->hashtable.find(lexeme);
返回std::boolalpha;
}
我还需要做什么?有可能退回bool吗?我发现几乎没有关于这方面的文档


这是我从

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

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

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

查看文档。上面写着:

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

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

bool contained = it != tempSymbolTable->hashtable.end();
有关文档,请参阅。上面写着:

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

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

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

std::unordered\u 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();
}
bool NS\u SymbolTable::SymbolTable::Contains(std::string lexeme)
{
SymbolTable*tempSymbolTable=此;
std::无序_映射::迭代器it=
tempSymbolTable->hashtable.find(lexeme);
返回它!=tempSymbolTable->hashtable.end();
}
参考:


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

std::无序映射::查找()
,与标准容器的其余查找函数一样,在出现故障时返回
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();
}
bool NS\u SymbolTable::SymbolTable::Contains(std::string lexeme)
{
SymbolTable*tempSymbolTable=此;
std::无序_映射::迭代器it=
tempSymbolTable->hashtable.find(lexeme);
返回它!=tempSymbolTable->hashtable.end();
}
参考:


EDIT:更改返回值的意义。

您认为
std::boolalpha
到底意味着什么?它不是一个布尔值……确切地说,你认为
std::boolalpha
意味着什么?这不是一个布尔值…你的逻辑是相反的。如果映射不包含字符串,则返回true。您的意思是
it!=tempSymbolTable->hashtable.end()
?函数名为
Contains()
,返回
false
将违反直觉。已修复,谢谢。他说他想让它返回bool,但他没有说它应该有什么价值:)你的逻辑是相反的。如果映射不包含字符串,则返回true。您的意思是
it!=tempSymbolTable->hashtable.end()
?函数名为
Contains()
,返回
false
将违反直觉。已修复,谢谢。他说他想让它返回一个bool,但他没有说它应该有什么价值:)