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

7

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


3
是的,C标准库没有提供这样的数据结构,但您可以使用一些非标准库来提供这种功能。 - Alok Save
1
可能是Hashtable as part of Standard C Library?的重复问题。 - djechlin
4个回答

8

基本上,C语言只有数组、结构体(类似于map,但键必须在编译时已知)和联合数据结构。其他所有的数据结构都必须手动编码或由库提供。


6
忽略以上所有误导性的回答,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


4

这不是标准C库的一部分。可以使用类似Glib的库。


我认为Oswald给出了更好的答案,但如果他们想要那种类型的功能,你给了OP一个解决方案。https://dev59.com/LHVD5IYBdhLWcg3wXacd - gnash117

0

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

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

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

  • 哈希表(GHashTable)
  • 双向链表(GList)
  • 队列(QQueue)
  • 数据集
  • 等等

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接