所以,我正在尝试编写一个函数,可以确定集合中有多少字符串是该集合中其他字符串的字符串。为了快速完成这项工作,我选择对字符串进行排序,然后将它们移动到“有效”和“无效”哈希集中,具体取决于我是否找到了重复项。麻烦的是,当我尝试对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;