ハッシュテーブルの挿入/参照/削除インターフェイスを提供する必要があります。私は内部バケット/エントリ管理を提供するためだけにハッシュテーブルを書いた。ハッシュ関数は外部から供給されるべきです。私は、ハッシュテーブルがバイト配列と固定長のデータ型を処理できるように、インタフェースを公開する方法について固執しています。問題は、バイト配列の場合、ハッシュ関数は配列の長さを知っている必要があり、他の型の場合は、その情報なしで行うことができるということです。私の問題は、ハッシュ関数が2つのパラメータを必要とするため、operator[]
をバイト配列に実装できないことです。そして、私はoperator[]
を大切にしておきたいと思います。これを回避する方法はありますか(T*
を専門にせず、その専門分野でoperator[]
のコンパイラエラーを投げます)?テンプレートの特殊化について
2
A
答えて
1
ハッシュテーブルのoperator []が、そこに格納されているデータ型の演算子[]と競合しないため、ここでは混乱しています。
hash_tableに演算子[]がある場合、演算子[]にキーを提供するhash_mapか、演算子[]がセルの内容を返します。
私は自分のハッシュテーブルを実装していますが、データにはデータだけでなく、データにいくつかの "メタデータ"、つまりセルに関する情報を直接格納しません。ハッシュテーブルが削除をサポートしているので、おそらくそのようなセルを見つけるための戦略が何であれ、おそらく他の場所に移動された可能性のある衝突にまだ到達できるようにする必要があります。従って、削除されたセルは利用可能であるが、占有されていないセルとは異なる意味を持ち、衝突コースのパスの一部である可能性がある。
あなたが言うように、ハッシュ関数は独立しています。したがって、格納メカニズムとは独立しており、ハッシュテーブルのoperator []を呼び出すことはまったくありません。
ハッシュテーブルはハッシュ関数と比較関数のみを使用し、それ以外の場合は独自のストレージポリシーと衝突処理ポリシーを使用します。
0
を扱うことができます。どこかの長さを記録する必要があります。値でハッシュテーブルにそれらを格納したい場合、オブジェクトにデータと長さの値をパッケージ化することができます:STLはstd :: vector <>とstd :: string < >。あるいは、ハッシュテーブルにバイト配列へのポインタ/参照を格納させたい場合は、長さを見つける場所を格納しているか、データへのポインタ/参照を持つ簡単な "handle"クラスを作成できます。だから、あなたのバイト配列のサイズが異なるバイト配列だけでなく、固定長データ型
「CashCow」が指摘しているように、バイト配列のoperator[]
とハッシュテーブルの固有の競合はありません。必要に応じてチェーン化することもできます。
関連する問題
- 1. ヘッダーファイルのテンプレートの特殊化
- 2. タイプのテンプレートの特殊化
- 3. テンプレートの特殊化エイリアス
- 4. テンプレートの特殊化は
- 5. テンプレートの特殊化は
- 6. テンプレート部分的特殊化
- 7. ジェネリッククラスのテンプレート関数の特殊化
- 8. テンプレートの特殊化の実装
- 9. テンプレートの特殊化VS関数のオーバーロード
- 10. C++でのテンプレートの特殊化
- 11. C++テンプレートの部分特殊化構文
- 12. C++テンプレートの特殊化問題
- 13. 列挙型テンプレートの特殊化
- 14. 明示的なテンプレートの特殊化
- 15. メンバ関数のテンプレート特殊化
- 16. テンプレート関数(intとint *)の2つの特殊化。コンパイルエラー
- 17. テンプレートの特殊化はあいまいです
- 18. すべてのサブクラスのテンプレートの特殊化
- 19. C++で部分テンプレートの特殊な特殊化を選択できません
- 20. C++ - 特殊化のベースとして既定のテンプレートを使用
- 21. テンプレートを特殊化<typename T、テンプレート<typename> class U>
- 22. 明示的な関数テンプレートの特殊化により、間違った特殊化が選択される
- 23. 値の範囲に対するテンプレートの特殊化
- 24. テンプレート化された引き数を使ったテンプレート関数の特殊化
- 25. C++テンプレートの特殊ケース
- 26. C++:テンプレート:部分的な特殊化:すべてのテンプレートを印刷
- 27. 列挙型を使用してテンプレートを特殊化する
- 28. テンプレートクラスをパラメータとしてテンプレート構造体を特殊化する
- 29. g ++部分テンプレートの特殊化によるバグ
- 30. cppにテンプレートの特殊化を定義しますか?
+1。私は、ハッシュテーブルは、キーのバイトレイアウトを認識すべきではないと思います。バイト配列キー用のラッパークラスを実装します。 – nakiya