简体   繁体   中英

vector of lists + iterator CPP

I am trying to implement insertion of a word into a chained hashtable.
The problem is I am trying to insert a object that has 2 fileds and I need access to one with an iterator. The problem seems to happen with the iterator it as the code doesn't work from the for cycle. I also overloaded the operator== in Vocabolo.cpp to make it work for my case.

I also have a problem the size of the vector, can I use a define? It seems not. Any advices please?

I declared my vector of list + iterator in the header file as :

vector<list<Vocabolo>> hash;
list<Vocabolo>::iterator it;

this is part of the class Vocabolo :

class Vocabolo {
public:
    Vocabolo();
    ~Vocabolo();

    void setVocabolo(Vocabolo);
    string getVocabolo();

    bool operator== (Vocabolo);

    string termine;
    string tipo;
};

this is the overloaded method operator==:

bool Vocabolo::operator== (Vocabolo x) {
    return getVocabolo() == x.termine;
}

the method that is not working!

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;
        }
}

Consider using std::find_if instead:

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;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM