2011-11-08 15 views
1

キーに複数の値を格納する場合、常にハッシュテーブルと値の間にリストを挿入する可能性があります。しかし、私はそれほど非効率的であると考えています。キーごとに複数の値をネイティブでサポートするCハッシュテーブルライブラリ

ハッシュテーブルは衝突を解決しなければならないので、なんらかのリストウォーキングがあります。クエリキーと一致するバケット内の最初のキーを見つけたときに停止するのではなく、単に別の間接をたどった後に別のリストを歩くよりもキャッシュパフォーマンスが良いと考えられます。

デフォルトでこれをサポートするライブラリ実装について知っている人は誰ですか(そして理想的には光沢があり、高速で、ハッシュテーブルもBSDまたは同様のライセンスを受けているのが理想的です)。私はいくつかの図書館を見てきましたが、私が望んだものは何もありませんでした。glibのdatasetsは、レコードを格納していてもリストには近づいていません。

+1

リンクされたリストを1つだけ歩くことは、キャッシュのパフォーマンスに関して新しいリストにジャンプすることとまったく同じですか?どちらの場合も、ポインタをたどるだけです。 –

+0

バケットはすでにキャッシュに入っている可能性があります。バケツ自体があなたが完全に正しいリンクリストになっている場合は、もちろん実装全体に依存します。 – barsoap

+0

すばやくGoogleから教えてくれました:http://uthash.sourceforge.net/ – Wolph

答えて

1

だから... multimapのようなもの?

GLibの建物は、MultiMapを提供する。

+0

意味論的には、操作上、libgeeは、ハッシュテーブルと値の間にリストを入れます。これは、abstractmultimap.valaで明らかです。 – barsoap

関連する問題