C でのハッシュテーブルの実装を探しています [closed] 質問する

C でのハッシュテーブルの実装を探しています [closed] 質問する

私は主に文字列キーに興味があります。誰かライブラリを教えてもらえますか?

ベストアンサー1

私も同じニーズがあり、リサーチした結果、libcfu

シンプルで読みやすいので、変更する必要がある場合でも、理解するのにあまり時間をかけずに行うことができます。また、BSD ライセンスです。構造体を変更する必要はありません (次のポインタを埋め込むなど)

私は以下の理由により、他のオプションを拒否しなければなりませんでした (個人的な理由であり、人によって異なる場合があります)。

  • sglib --> これはマクロの迷路であり、マクロだけを使用してこのようなコードベースをデバッグしたり変更したりするのは快適ではありませんでした。
  • cbfalconer --> ライセンス上の問題が多く、サイトがダウンし、サポート/著者に関する不利な議論がウェブ上で多すぎたため、リスクを負いたくなかった
  • google sparce-hash --> すでに述べたように、これは C ではなく C++ 用です
  • glib (gnome hash) --> 非常に有望に見えましたが、開発キットをインストールする簡単な方法が見つかりませんでした。必要なのは C ルーチン/ファイルだけで、完全な開発環境ではありませんでした。
  • Judy --> 単純な用途には複雑すぎるようです。また、問題が発生した場合に自分でデバッグする準備ができていませんでした。
  • npsml (ここで言及) --> ソースが見つかりません
  • strmap非常にシンプルで便利だと思いました。キーと値の両方が文字列でなければならないというのは単純すぎると思います。値が文字列であるというのは制限が厳しすぎるようです (void * を受け入れるべきです)
  • ウタッシュ--> 良さそうです (ハッシュテーブルについては Wikipedia で言及されています)。構造体を変更する必要があることがわかりました。私の用途ではパフォーマンスはそれほど重要ではないため、変更したくありませんでした。開発速度が重要です。

まとめると、非常に単純な用途には strmap が適しています。追加のメモリ使用が懸念される場合は uthash が適しています。開発のスピードや使いやすさが主な目的である場合は、libcfu が勝ります [libcfu は、ノード/ハッシュテーブルを維持するために内部でメモリ割り当てを行うことに注意してください]。利用できるシンプルな C ハッシュ実装があまりないのは驚きです。

おすすめ記事