Вы никогда ничего не вставляете в приватную переменную-член vector v
.Вы создаете вектор как локальную переменную стека, которую вы также name v
в своем конструкторе HashTable.Затем вы продолжаете вставлять элементы в этот временный вектор, который выходит из области видимости, как только вы покидаете конструктор.Поэтому, конечно, позже, в вашей функции HashTable::find
переменная члена класса v
будет пустой.
Ваш конструктор должен выглядеть примерно так:
//HashTable constructor
HashTable::HashTable()
{
this->v.reserve(TABLE_SIZE); //reserve table size
MAP_TYPE m;
for (int i = 0; i < TABLE_SIZE; ++i) //fill vector with empty maps
this->v.push_back(m);
}
Выше я использую this
ключевое слово, чтобы подчеркнуть, что я обращаюсь к закрытой переменной-члену v
, но она вам не нужна.(Хотя, как правило, хорошей практикой является принятие соглашений об именах для закрытых переменных-членов, таких как добавление суффикса _
или префикса m_
или чего-то подобного.)
Еще лучшим способом инициализации вектора было быпросто использовать конструктор заполнения вектора, как предложено в R.Ответ Мартиньо Фернандеса .