私は主に文字列キーに興味があります。誰かが私を図書館に向けることができますか?
同じニーズがあり、いくつかの調査を行った結果、 libcf
シンプルで読みやすいので、変更する必要がある場合は、理解するのにあまり時間をかけずにそれを行うことができます。また、BSDライセンスのものです。構造体を変更する必要はありません(次のポインタを埋め込むため)
次の理由で他のオプションを拒否する必要がありました(個人的な理由、YMMV):
要約すると、strmapは非常に簡単に使用できます。追加のメモリ使用が懸念される場合は、uthashを使用します。開発の速度または使いやすさだけが主な目的である場合は、libcfuが優先されます[libcfuはノード/ハッシュテーブルを維持するために内部的にメモリ割り当てを行います]。利用できる単純なCハッシュ実装があまりないのは驚くべきことです。
GLibは、Cプロジェクトの基盤として使用できる優れたライブラリです。ハッシュテーブルなど、適切なデータ構造が用意されています。 http://developer.gnome.org/glib/2.28/glib-Hash-Tables.html (2011年4月6日更新)
文字列の場合、 Judy Array が適切な場合があります。
Judy配列は複雑ですが、整数または文字列キーを使用して値を保存および検索するための非常に高速な連想配列データ構造です。通常の配列とは異なり、Judy配列はまばらです。つまり、未割り当てのインデックスの範囲が広い場合があります。
スパース動的配列を実装する最先端のコアテクノロジーを提供するCライブラリ。 Judy配列は、nullポインターで単純に宣言されます。 Judyアレイは、実装されている場合にのみメモリを消費しますが、必要に応じて利用可能なすべてのメモリを利用できるように成長できます。
その他の参照、
この Wikipediaハッシュ実装リファレンス には、いくつかのC
オープンソースリンクがあります。
また、 cmph -C
の最小完全ハッシュライブラリは、アルゴリズム。
この質問をしてから長い時間が経ちました...独自のパブリックドメインライブラリをリストに追加できるようになりました。
Dave Hansonの Cインターフェイスと実装 には、洗練されたハッシュテーブルと他のいくつかの適切に設計されたデータ構造が含まれています。 Nice文字列処理インターフェイスもあります。余裕があればこの本は素晴らしいですが、そうでなくても、このソフトウェアは非常にうまく設計されており、全体を学習するのに十分小さく、いくつかの異なるプロジェクトで再利用しやすいことがわかりました。
Cインターフェイスと実装 Cでのハッシュテーブルの実装について説明します。ソースコードは オンラインで利用可能 です。 (本の私のコピーは仕事中ですので、私はより具体的にすることはできません。)
ApacheのAPRライブラリには独自の hash-implementation があります。これは、Apacheが実行されているものに既に移植されており、 Apacheライセンス もかなりリベラルです。
samtools/bwa/seqtk/klibのkhash.h
curl https://raw.github.com/attractivechaos/klib/master/khash.h
決して使用しませんでしたが、 Google Sparsehash は動作する可能性があります
tcl をダウンロードして、実績のあるtclハッシュ関数を使用します。それは簡単です。 TCL APIは十分に文書化されています。
Gperf-完全ハッシュ関数ジェネレーター
http://www.ibm.com/developerworks/linux/library/l-gperf.html