6

我现在正在学习 C,因为我知道 perl 和一点 python。我进行了快速搜索,发现没有像 perl/python 中那样明确的哈希/字典,我看到人们说您需要一个函数来查找哈希表。所以事实是 C 不提供固有的散列结构,你必须编写一些函数才能在 C 中使用散列?

4

4 回答 4

8

基本上,C 拥有的唯一数据结构是数组、结构(有点像映射,但在编译时必须知道键)和联合。其他一切都必须手动编码或由库提供。

于 2013-04-22T15:32:52.007 回答
4

它不是标准 C 库的一部分。使用诸如 Glib 之类的库。

于 2013-04-22T15:31:12.093 回答
3

忽略上述所有误导性的答案,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);

签出:

https://pubs.opengroup.org/onlinepubs/9699919799/functions/hcreate.html

于 2019-07-26T16:17:18.767 回答
0

我建议你看看一个非常好的库GLib

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

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

  • 哈希表(GHashTable)
  • 双链表(GList)
  • 队列(QQueue)
  • 数据集
  • ETC
于 2013-04-22T16:43:18.967 回答