我正在尝试将单词插入到链式哈希表中
问题是我试图插入一个有2个文件的对象,我需要访问一个带有迭代器的对象。问题似乎发生在迭代器it
上,因为代码在for循环中不起作用。我还在operator==
中重载了Vocabolo.cpp
,以使其适合我的情况。
我的矢量大小也有问题,我可以使用定义吗?似乎没有。有什么建议吗?
我在头文件中将list + iterator的向量声明为:
vector<list<Vocabolo>> hash;
list<Vocabolo>::iterator it;
这是Vocabolo班的一部分:
class Vocabolo {
public:
Vocabolo();
~Vocabolo();
void setVocabolo(Vocabolo);
string getVocabolo();
bool operator== (Vocabolo);
string termine;
string tipo;
};
这是重载方法运算符==:
bool Vocabolo::operator== (Vocabolo x) {
return getVocabolo() == x.termine;
}
无效的方法!
bool HashV::Insert(Vocabolo nuovo) {
key = this->HashUniversale(nuovo.termine);
for (it = this->hash[key].begin(); it != this->hash[key].end(); it++)
if (it->termine == nuovo.termine)
return false;
else {
hash[key].push_back(nuovo);
return true;
}
}
答案 0 :(得分:0)
请考虑使用std :: find_if:
auto itVoca = std::find_if(this->hash[key].begin(), this->hash[key].end(), [nuovo](const string& str)
{
return str != nuovo.termine;
});
bool found = itVoca != this->hash[key].end();
if(found ) hash[key].push_back(nuovo);
return found;