2012-02-23 68 views
1

在C中,你可以創建一個字典嗎?我來自Objective-C背景,所以我想知道是否有類似NSDictionary的東西。C中是否存在字典?

+1

查看http://stackoverflow.com/questions/6118539/hashtable-as-part-of-standard-c-library – Avi 2012-02-23 00:18:01

回答

7

您可以使用C語言創建任何您想要的東西。您只需要大部分語言支持。

3

可以在C中創建一個字典,但沒有內置到標準C庫的字典。

對Google代碼的快速搜索顯示有開源(並且獲得慷慨許可)的C字典實現herehere

1

沒有OOP和模板,很難實現一個真正通用,易於使用的散列表或平衡樹,因此值得在運行時庫中提供語言。這就是說,你可以始終實現你自己的,或者只是使用C++(請參閱unordered_mapmap)。

+0

「Performant」並不是一個單詞,儘管它會成爲一個詞,因爲人們繼續使用它。我認爲你的意思是數據結構/功能必須是有效的。爲什麼你認爲散列表和平衡樹的C實現會比OOP C++實現效率低? – 2012-02-23 04:58:51

+0

(沒有得到完成我的評論 - 得到了可怕的「每5秒只編輯」的消息!) 我寫了一個通用的散列表包在C中,它易於使用和快速 - 表80,000個遙測點的平均比較數略大於1,1個標準偏差內的點仍低於2個比較,2個標準差內的點略高於2個比較。 – 2012-02-23 05:15:03

+1

@ranko:哼?你建立一個存儲空指針的樹/哈希,並接受一個具有int cmp(void *,void *)原型的比較函數;並返回-1/0/1。這已經完成了多年,易於使用,並且在C中創建了通用樹/散列(例如,參見標準C庫bsearch API)。 – tbert 2012-02-23 05:42:21

0

Posix確實有一個有限的散列表 - 見hcreate(), hsearch() and hdestroy(),可以由C程序使用。

這個限制的討論出現在這個stackoverflow question

+0

GNU庫增加了'hcreate_r()','hsearch_r()'和'hdestroy_r()',它們允許程序中有多個散列表。 – 2012-02-23 04:49:28

相關問題