2013-11-23 57 views
0

我想使用類型爲string的列表數組來製作不同種類的哈希表。因此,我創建:列表<string>的數組,插入一個字符串表現怪異

list<string> hashtableFold[arraysize]; 
list<string> hashtableSelect[arraysize]; 

在散列函數,position被計算,然後傳遞到一個相當簡單的插入函數:其中

Hash::insert(Hash::hashtableFold, position, contents); 

的代碼是:

void Hash::insert(list<string> whichList[arraysize], int pos, string contents) { 
    whichList[pos].push_back(str); 

}

但是,如果我打印hashtableFold(使用下面的代碼),tabl e是空的:(。

void Hash::print(list<string> whichList[arraysize]) { 
    //loop over array 
    for (int i = 0; i < arraysize; i++) { 
     cout << i << ": "; 
     list<string>::iterator k; 
     //loop over list 
     if (whichList[i].empty()) { 
      cout << "empty"; 
     } // if 
     else for (k = whichList[i].begin(); k != whichList[i].end(); k++) 
      cout << *k << " | "; 
     cout << endl; 
    } // for 
} 

這裏怎麼回事?

對於有興趣,這裏是完整的源代碼:https://dl.dropboxusercontent.com/u/9844620/ds4.zip

回答

1

的問題是你有兩個哈希表,這裏的有關提取物用註釋代碼

class DigitFold : public Hash // every DigitFold has its own hash table 
{ 
}; 

int main() 
{ 
    Hash hash; // first hash table 
    DigitFold df; // contains second hash table 

    setInput(stream); 
    df.fold(stream); 

    hash.print(hash.hashtableFold); 
} 

如果你看一下代碼爲DigitFold::fold,您會看到它將項添加到它自己的散列表(第二個散列表),但是您打印出在main(第一個散列表)的第一行上聲明的散列表。該哈希表沒有添加任何內容。

最後一行更改爲

df.print(df.hashtableFold); 

可能工作(假設沒有其他錯誤)。

但實際上代碼有點困惑,您需要重新考慮DigitFoldHash之間的關係,並重新設計Hashinsertprint方法不應該將Hash對象的內部作爲參數。由於他們是Hash的方法,他們已經可以訪問這些,使他們的參數只是混淆。

+0

太棒了!謝謝。但是,現在名單充滿了空字符串..:p https://www.dropbox.com/s/bltf9eqisnsz09y/Screenshot%202013-11-23%2015.54.24.png –

+0

那麼正如我所說,假設沒有其他錯誤。 – john

+0

;)將進入那個。謝謝! –