2015-10-19 1 views
0

Извините заранее, если я не объясняя это ясная .. Ладно, так что я объявленная хэш-таблицы с использованием вектора, как так:Вернуть размер хеш-таблицы?

> class HashTable{ 

    private: 
     vector<string> arrayofbuckets[100]; 

    public: 
     void insertelement(string input); 
     void deleteelement(string remove); 
     bool lookupelement(string search); 
     int tablesize(); 

> }; // end of class 

Я также создание меню с помощью переключателя заявления для вставки элементов в хэш-таблице:

> case 'I': 
{ 
     cout << " Which element would you like to insert?: "; 
     cin >> Element; 

     hash.insertelement(Element); 

     } 
    break; 

затем он получает перешел к этой функции:

void HashTable::insertelement(string input){ 

    int hashValue = 0; 

    for(int i = 0; i<input.length(); i++){ 

     hashValue = hashValue + int(input[i]); 

    } 

    hashValue = hashValue % 100; 
    arrayofbuckets[hashValue].push_back(input); 

    cout << " The element " << input << " has been put into value " << hashValue << ends; 
} 

Кто-нибудь знает, как написать функцию для получения и отображения размера таблицы?

ответ

0

Самый лучший способ, чтобы отслеживать размер внутри функций, которые должны инициализировать или изменить его:

HashTable::HashTable() : size_(0) { } 

void HashTable::insertelement(string input){ 
    ...do all the existing stuff... 
    ++size_; 
} 

// similarly --size_ inside deleteelement... 

int HashTable::tablesize() const { return size_; } 

Убедитесь, что вы добавляете элемент int size_; данных.

Обратите внимание, что bool lookupelement(string search) const; и int tablesize() const; должны быть const - я вставил ключевое слово здесь, так что вы знаете, куда поместить его, и использовать его выше при определении tablesize().


Если вы действительно решили избежать дополнительного переменного-члена, вы также можете сделать это ...

int HashTable::tablesize() const { 
    int size = 0; 
    for (std::vector<std::string>& vs : arrayOfBuckets) 
     size += vs.size(); 
    return size; 
} 

... но большинство пользователей будут ожидать постоянная время и быстрая функция size(): они могут вызывать ее каждый раз через свои петли, поэтому держите ее дешевой.

+0

Вы, сэр, только что спасли меня от того, чтобы подчеркнуть это назначение uni. Спасибо! – Reckope

+0

@JoeDavis: добро пожаловать - удачи в вашем курсе. Приветствия. (Небольшой совет - если бы вы отметили это с помощью C++, у вас, вероятно, появилась бы больше помощи и быстрее) –

Смежные вопросы