C 有散列/字典数据结构吗?
Posted
技术标签:
【中文标题】C 有散列/字典数据结构吗?【英文标题】:Does C have hash/dictionary data structure? 【发布时间】:2013-04-15 13:50:30 【问题描述】:我现在正在学习 C,因为我知道 perl 和一点 python。我进行了快速搜索,发现没有像 perl/python 中那样明确的哈希/字典,我看到人们说您需要一个函数来查找哈希表。所以事实是 C 没有提供固有的哈希结构,你必须编写一些函数才能在 C 中使用哈希?
【问题讨论】:
是的,C 标准库不提供任何此类数据结构,但您可以使用一些提供该功能的非标准库。 感谢您的澄清~ Hashtable as part of Standard C Library?的可能重复 【参考方案1】:基本上,C 具有的唯一数据结构是数组、结构(有点像映射,但键必须在编译时知道)和联合。其他一切都必须手动编码或由库提供。
【讨论】:
【参考方案2】:它不是标准 C 库的一部分。使用 Glib 等库。
【讨论】:
我认为 Oswald 给出了更好的答案,但如果他们想要那种类型的功能,你给了 OP 一个解决方案***.com/questions/2540/good-stl-like-library-for-c【参考方案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
【讨论】:
【参考方案4】:我建议你看看一个非常不错的库GLib:
GLib 是一个通用的实用程序库,它提供了许多有用的 数据类型、宏、类型转换、字符串实用程序、文件 实用程序,主循环抽象,等等。它适用于许多 类 UNIX 平台,以及 Windows 和 OS X。GLib 发布 根据 GNU 图书馆通用公共许可证 (GNU LGPL)。
有许多开源项目使用这个库:GNOME、Wireshark 等等。 Glib 包括许多有用的数据结构的实现,例如:
哈希表(GHashTable) 双链表 (GList) 队列(QQueue) 数据集 等【讨论】:
以上是关于C 有散列/字典数据结构吗?的主要内容,如果未能解决你的问题,请参考以下文章