C有哈希/字典数据结构吗?

时间:2013-04-22 15:28:12

标签: c hashtable

我正在学习C,现在来自了解perl和一点python。我做了一个快速搜索,发现在perl / python中没有显式的哈希/字典,我看到人们说你需要一个函数来查找哈希表。所以事实是C不提供固有的哈希结构,你必须编写一些函数才能在C中使用哈希?

5 个答案:

答案 0 :(得分:8)

基本上,C所拥有的唯一数据结构是数组,结构(有点像地图,但必须在编译时知道密钥)和联合。其他所有内容必须手动编码或由图书馆提供。

答案 1 :(得分:4)

它不是标准C库的一部分。使用像Glib这样的库。

答案 2 :(得分:1)

我建议你看看一个非常好的图书馆GLib

  

GLib是一个通用的实用程序库,它提供了许多有用的功能   数据类型,宏,类型转换,字符串实用程序,文件   实用程序,主循环抽象等。它适用于许多人   类似UNIX的平台,以及Windows和OS X.发布了GLib   根据GNU图书馆通用公共许可证(GNU LGPL)。

有许多OpenSource项目使用这个库:GNOME,Wireshark等等。 Glib包括许多有用数据结构的实现,例如:

  • 哈希表(GHashTable)
  • 双重连结名单(GList)
  • 队列(QQueue)
  • 数据集

答案 3 :(得分:1)

KLib包含以下智能定义:

  • khash.h :基于双哈希的通用哈希表。
  • kbtree.h :基于B-tree的通用搜索树。
  • ksort.h :泛型排序,包括introsort,merge sort,heap sort,comb sort,Knuth shuffle和k-small算法。
  • kseq.h :通用流缓冲区和FASTA / FASTQ格式解析器。
  • kvec.h :通用动态数组。
  • klist.h :通用单链表和内存池。
  • kstring。{h,c} :基本字符串库。
  • kmath。{h,c} :数值例程,包括MT19937-64伪随机生成器,基本非线性编程和一些特殊的数学函数。

答案 4 :(得分:1)

忽略所有上述误导性答案,C早在所有这些奇特的语言都存在之前就已经为此提供了一个标准库。基本版本只创建一张表,GNU版本只需要一张表。

   #include <search.h>

   int hcreate(size_t nel);

   ENTRY *hsearch(ENTRY item, ACTION action);

   void hdestroy(void);

   #define _GNU_SOURCE         /* See feature_test_macros(7) */
   #include <search.h>

   int hcreate_r(size_t nel, struct hsearch_data *htab);

   int hsearch_r(ENTRY item, ACTION action, ENTRY **retval,
                 struct hsearch_data *htab);

   void hdestroy_r(struct hsearch_data *htab);

签出