2017-02-28 57 views
0

假設我的哈希表包含不同大小的單詞,並且我想跟蹤單獨哈希表中不同大小的單詞。除了爲20個不同的字長創建20個不同的哈希表文件外,有沒有辦法通過一個類來提供一個const?向一個類提供一個const變量

動態分配不是一個選項,因爲它會爲每個表項的指針變量花費8個附加字節。

template <//Is there a way to supply a const here to change the value of size?> 
class HashTable 
{ 
    static const int size = #; 

    struct TableEntry 
    { 
     char words[size]; 
    } 

} 
+1

像過早優化 –

回答

2

積分模板參數被允許:

template <int Size> 
class HashTable ... 

(我通常寧願size_t Size,但你需要有包含的頭定義它,如<cstddef>)。


另外,Obvlious船長有一個好點的,大多數人在考慮這樣的優化還沒有真正得到需要他們,只是陷入了一個概念上的問題。如果您確實有需要,請參閱...

動態分配不是一個選項,因爲它會爲每個表項的指針變量花費8個附加字節。

......還有其他的選擇,如果你不需要擦除元素,特別容易實現。例如,你可以在一個連續的內存區域中的文本存儲爲...

this\0that\0whatever\0huh\0 

...然後存儲偏移到該區域在一個哈希表。如果您知道輸入數據不會超過64k,則每個偏移只需要2個字節。 4個字節將允許最多4GB的字符串數據。而對於更長的單詞,則會浪費較少的空間用於未使用/空的散列表桶,以便在其他位置存儲文本時進行平衡。