方が好ましい状況は以下の2つです。エントリーへのポインタが定数である必要がある場合。ハッシュテーブルに格納されているエントリーが非常に大きい場合(12ワード以上)。大きな構造体を効率的に扱えません。複雑な部分(コールバック関数、構造体など)を隠蔽します。目を通しておいてください。ある通りにエントリークラスを宣言する必要があります。クラスの中でキーを処理する関数も宣言します。ほとんどの場合、エントリークラスは完全にインラインで書くことができます。テンプレートのパラメータはエントリークラスです。利用しなくてはいけません。関数を利用してください。関数では列挙ができますが、並び順は見かけ上ランダムである(ソートされていない)ことに気をつけてください。スタック、クラスメンバ、ヒープに割り当てることができます。エントリーへのポインタは、ハッシュテーブルにアイテムが追加・削除された際に変更されることがあります。エントリーへのポインタを長時間保持しないでください。本質的にスレッドセーフではありません。マルチスレッドで利用する場合、適切なロック機構を用意する必要があります。その関連クラスが利用用途に合うかどうか確認してください。エントリークラスを宣言する必要がないため、それらの方がずっと使いやすくなっています。単純なキー型・データ型を利用するのであれば、多くの場合こちらの方が良い選択肢です。複雑な部分のほとんどを隠蔽しつつ、ハッシュテーブルを利用するための高レベルなインタフェースを提供します。以下のような機能を持ちます:ハッシュテーブルの操作はエントリークラスを使わずに行うことができます。コードの可読性を高めます。スレッドセーフ性(オプション)。ハッシュテーブルは読み書きの際にロックを設定することができます。定義されたキークラス。インタフェースを自動的にクリーンアップします。自動的にオブジェクトを解放・削除し、メモリリークを防ぎます。ここから派生した3つの派生クラスから、保持するデータ型に合わせて利用するクラスを1つ選んでください。