c ++ unordered_set .find方法不会编译,给出“表达式必须有类类型”的错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c ++ unordered_set .find方法不会编译,给出“表达式必须有类类型”的错误相关的知识,希望对你有一定的参考价值。

所以,我正在尝试编写一个函数,可以确定集合中有多少字符串是该集合中其他字符串的字符串。为了快速完成这项工作,我选择对字符串进行排序,然后将它们移动到“有效”和“无效”哈希集中,具体取决于我是否找到了重复项。麻烦的是,当我尝试对unordered_sets使用find方法时,我得到一个编译时错误,告诉我“表达式必须具有类类型”。

我查看了网站,但我没有看到任何有关该错误的帖子,我认为是同样的问题。

我在Visual Studio中使用c ++工作,我应该提到代码没有完成;在给出错误的那一行之后我没有写任何东西。此外,它特别是以红色加下划线的std :: unordered_set“valid”的名称。

值得注意的是,这段代码是一项正在进行的工作,因此有一些事情写下来,我可能并不需要;例如,我可能不会最终使用那些long longs(因为我已经意识到尝试使用单个,巨大的字符数组而不是字符串可能比它的价值更多的努力。)

这是我正在研究的方法:

编辑:我删除了这个方法的一些不相关的部分,因为它的起源是敏感的。我为缺乏远见而道歉。

int Anagram_Locator::filterAnagrams()
{
    ...

    //the valid and invalid hash sets
    std::unordered_set<std::string> valid();
    std::unordered_set<std::string> invalid();
    //pull in the words, and sort them. Then, send them to either the valid or invalid string hash sets
    while (std::cin >> transferString)
    {

        ...

        //is it in the valid list?
        std::unordered_set<std::string>::const_iterator found = valid.find (transferString);

    }
}

此代码段中的最后一行是未编译的行。这对我来说特别令人沮丧,因为它的编写方式与此c ++指南中的完全相同:

The c++ reference page I was looking at

我认为这就是我需要的所有代码,但经验告诉我,编程问题通常会导致我认为部分代码无关紧要。因此,我在下面发布了我的其余代码。

编辑:其余的代码变得无关紧要,所以我删除它是为了清楚。

答案

这似乎不正确:

std::unordered_set<std::string> valid();
std::unordered_set<std::string> invalid();

您声明了两个返回集合的函数,而不是两个集合。

你真的不想要:

std::unordered_set<std::string> valid;
std::unordered_set<std::string> invalid;

以上是关于c ++ unordered_set .find方法不会编译,给出“表达式必须有类类型”的错误的主要内容,如果未能解决你的问题,请参考以下文章

std :: unordered_set :: find - 仅为find()构造一个实例

leetcode-3 无重复字符的最长字串(滑动窗口,unordered_set, st.find(string[i]))

leetcode-3 无重复字符的最长字串(滑动窗口,unordered_set, st.find(string[i]))

C++----unordered_map unordered_set使用及模拟

C++----unordered_map unordered_set使用及模拟

如何按输入顺序输出 C++11 unordered_map/unordered_set 和 Java HashMap/HashSet 值?