2012-02-23 4 views
1

Cでは、辞書を作成できますか?私はObjective-Cの背景から来ていますので、NSDictionaryに似たものがあるかどうかを知りたいと思います。辞書はCに存在しますか?

+1

http://stackoverflow.com/questions/6118539/hashtable-as-part-of-standard-c-library – Avi

答えて

7

Cで必要なものを作成することができます。ほとんどの場合、母国語のサポートはありません。

3

Cで辞書を作成しますが、標準のCライブラリには辞書が組み込まれていません。

Googleコードのクイック検索では、オープンソースの(そして十分にライセンスされた)C辞書の実装がherehereであることがわかります。

1

OOPとテンプレートがなければ、実際には一般的で使いやすいというパフォーマンスを持つハッシュテーブルまたはバランスツリーを実装するのは難しいでしょう。したがって、付属のランタイムライブラリに入る価値があります。言語。

これは、あなた自身で実装することも、C++を使うこともできます(unordered_mapまたはmapを参照)。

+0

「Performant」は実際には言葉ではありませんが、人々はそれを使い続けているため、1つになります。私はデータ構造/機能が効率的でなければならないという意味でそれを意味していると思います。なぜ、Cのハッシュテーブルやバランスのとれたツリーの実装は、OOP C++の実装よりも効率が悪いと思いますか? –

+0

(私のコメントを完成させられなかった - 恐ろしい "5秒ごとに編集する"というメッセージを得た!) 使いやすい高速のCで汎用ハッシュテーブルパッケージを書いた80,000テレメトリポイントの平均比較数は1をわずかに上回り、1標準偏差内のポイントは2比較未満であり、2標準偏差内のポイントは2比較をわずかに上回っていた。 –

+1

@ranko:ハァッか。 voidポインタを格納し、int cmp(void *、void *)のプロトタイプで比較関数を受け入れるツリー/ハッシュを構築します。 -1/0/1を返します。これは長年にわたって行われてきており、使いやすく、Cで汎用のツリー/ハッシュを作成します(標準のCライブラリbsearch APIなどを参照)。 – tbert

0

Posixには限定されたハッシュテーブルがあります(Cプログラムで使用できるhcreate(), hsearch() and hdestroy()を参照)。

この制限については、stackoverflow questionに記載されています。

+0

GNUライブラリは 'hcreate_r()'、 'hsearch_r()'、 'hdestroy_r()'を追加しています。 –

関連する問題