Я пытаюсь создать шаблонный класс HashTable, который использует Seperate Chaining для разрешения конфликтов. Моя проблема в том, что я не знаю, как перебирать список по индексу определенного массива, потому что я не уверен в синтаксисе.Синтаксис для использования Итератора для массива списков STL
Я получаю 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
Что я делаю неправильно?
Это сделал трюк! Ничего себе не могу поверить, что я этого не замечал. Теперь кажется, что у меня проблема с моим конструктором ... Это теперь, как это должно быть объявлено? –
Список [i] = новый список [prime]; –
Если вы хотите, чтобы ваша переменная List указывала на массив из списка, вам следует динамически выделить его: List = new list [prime]; Это создает «простое» количество элементов списка. Обратите внимание, что вам нужен конструктор по умолчанию, который запускается «простое» количество раз. Чтобы получить доступ к определенному списку в вашем массиве, выполните List [i]. –