2015-10-19 61 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 

我一直在使用switch語句也創建一個菜單將元素插入哈希表:

> 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++標記這個,你可能會得到更多的幫助和更快) –