2017-02-28 6 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の文字列データを許可します。長い単語の場合は、未使用/空のハッシュテーブルバケットのスペースを無駄にするので、テキストを別の場所に格納しておくとバランスが取れます。

関連する問題