Я пытаюсь создать шаблонный класс HashTable, который использует Seperate Chaining для разрешения коллизий. Моя проблема в том, что я не знаю, как перебирать список по конкретному индексу массива, потому что я не уверен в синтаксисе.
Я продолжаю получать ошибку C2228: слева от .end должен быть класс / структура / объединение
и ошибка C2228: слева от .push_front должен быть класс / структура / объединение
Я объявил свой список в качестве частного члена класса следующим образом:
list<T1> **List;
И использовали конструктор по умолчанию для предварительного заполнения каждого индекса циклом for.
Вот проблемные моменты:
template <typename T1>
void HashTable<T1>::Insert(T1 var)
{
int index = HashFunction(var);
List[index].push_front(var);
++LF;
cout << "Load Factor: " << LF << endl << endl;
}template <typename T1>
void HashTable<T1>::Delete(string key)
{
int visited = 0;
list<T1>::iterator iter;
for(int i = 0; i < prime; ++i)
{
iter = List[i].begin();
while((iter != List[i].end) && ((*iter)->getKey() != key)) //While iter is not at the end of the list and while ID of iter is not equal to ID being obliterated
Что я делаю неправильно?
Мне кажется, что вы хотите только один массив списков. Прямо сейчас List [i] возвращает указатель на список<T1>, тогда как вы можете использовать List [i] как список<T1> сам.
Попробуйте использовать
list<T1> *List;