2014-11-22 3 views
1

Я пытаюсь создать шаблонный класс 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 

Что я делаю неправильно?

ответ

0

Мне кажется, что вам нужен только один массив списков. Прямо сейчас Список [i] возвращает указатель на список < T1>, тогда как List [i] может быть списком < T1>.

Попробуйте использовать

list<T1> *List; 
+0

Это сделал трюк! Ничего себе не могу поверить, что я этого не замечал. Теперь кажется, что у меня проблема с моим конструктором ... Это теперь, как это должно быть объявлено? –

+0

Список [i] = новый список [prime]; –

+0

Если вы хотите, чтобы ваша переменная List указывала на массив из списка , вам следует динамически выделить его: List = new list [prime]; Это создает «простое» количество элементов списка. Обратите внимание, что вам нужен конструктор по умолчанию, который запускается «простое» количество раз. Чтобы получить доступ к определенному списку в вашем массиве, выполните List [i]. –