Я пытаюсь использовать следующий основной тест для выбранного класса HashMap.push_back в вектор внутри класса хэш-карты
#include <iostream>
#include "HashMap.h"
using namespace std;
int main(){
HashMap<int,vector<string>> hash(20);
vector<string> vec;
cout<<"Inserting item... ";
if(hash.insert(2)){
cout<<"successful. ";
hash.find(2).push_back("word ");
hash.find(2).push_back("is ");
hash.find(2).push_back("pushed ");
hash.find(2).push_back("back. ");
hash.find(2).push_back("yes!\n");
} else {
cout<<" unsuccessful.";
return 0;
}
vec = hash.find(2);
for(auto& words: vec)
cout<< words<<endl;;
return 0;
}
Заключительный цикл не печатает ничего.
find
функция определяется следующим образом:
Data find(const Key& key) { return array[findPos(key)].data_; }
где Data
является второй переменной шаблона в классе HashMap. Я провел пару тестов, и find
возвращает пустые векторы, даже после использования push_back
. почему это? что я могу сделать, чтобы вставлять элементы в векторы?
О, ничего себе, я полностью замаскировал это. Спасибо большое! – zeta
как я могу сделать так, чтобы ссылки не становились недействительными? – zeta
Вам нужно будет создать свой собственный тип итератора, который сохранит (общий) указатель на исходный объект - это позволит вам получить доступ к массиву после перераспределения. Это нетривиально, медленнее и, вероятно, не нужно делать, хотя, поскольку вы можете просто потребовать (как это делает стандарт), что ссылки используются только до следующей вставки. – VF1