列表向量+迭代器CPP

时间:2015-08-30 14:08:41

标签: c++ list vector iterator

我正在尝试将单词插入到链式哈希表中 问题是我试图插入一个有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;
        }
}

1 个答案:

答案 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;