为什么C标准库中没有哈希表?

问题描述

| 为什么标准C库中没有Hashtable支持?有什么具体原因吗?     

解决方法

标准C库中没有哈希表,因为: 没有人向工作组提交提案;要么 工作组认为没有必要。 这就是ISO运作的方式。提案被提出并被接受或拒绝。 您必须小心添加到标准库中的内容,因为您有两个相互冲突的组。作为用户,您可能希望将阳光下的每个数据结构都添加到标准中,以使该语言更有用。 但是,作为语言实现者(顺便说一句,这些人可能是组成各个工作组中大多数的人,因此他们的观点可能会产生更大的影响),您真的不希望麻烦实施可能不会被所有人使用的东西。 C89出现时出现的所有内容都与以下事实有关,即主要目的是编纂现有实践而不是引入新实践。自那时以来,标准的所有迭代在执行功能方面都比较自由,但是向后兼容仍然是一个重要问题。 我自己,我也有矛盾。我很想在Java中使用Java,C ++或Python库的所有功能。当然,这会使为新手学习所有内容变得更加困难,而且正如一位评论者所说,可能会使它变得如此困难。任何代码猴子都可以抽出有用的代码,从而降低了我的价值:-) 在漫长而辉煌的职业生涯中,我几乎拥有了我所需要的所有数据结构。您不限于这类资料的标准库。您可以使用很多第三方工具来完成这项工作,并且(像我一样)您也可以自己开发。 如果您想知道为什么要在每次迭代中做出某些决定,那么ISO(通常是在ISO接管之前是ANSI)通常会发布基本原理文档。 ANSI的C89可以在这里找到。它在范围内包含以下小美感:   本基本原理主要侧重于基础文档中描述的对该语言的添加,说明和更改。这不是整个C语言的基本原理:委员会负责将现有的语言编成代码,而不是设计一种新的语言。在此基本原理中,未尝试捍卫该语言的现有语法,例如声明的语法或运算符的绑定。 我特别高兴地承认,对于在进行标准化之前可能出现的任何混乱,他们不承担任何责任。 但是,也许对您问题的真正答案就在这条指导原则之一: 保持C的精神。委员会一直将保留C的传统精神作为主要目标。C的精神有很多方面,但是本质是C语言所基于的基本原则的社区观点。 C精神的某些方面可以概括为以下短语: 相信程序员。 不要阻止程序员去做需要做的事情。 保持语言小而简单。 仅提供一种执行操作的方法。 即使不能保证可移植,也要使其快速。 第三个原因可能是该库没有通过最初的标准化工作进行大规模扩展的主要原因-并且,从委员会的这种扩展可能导致ANSI C被标记为C2038而不是C89的事实。     ,按照今天的标准,C似乎不常见,因为没有定义有用的数据结构。没有。甚至不是字符串-而且,如果您认为C字符串是一种数据结构,那么,我们将不得不就“数据结构”是什么达成一致。 如果您喜欢C,则将其视为“空白” ...整个应用程序由您编写的代码以及您选择插入的库组成,再加上一些相当原始的标准库函数,也许有一个或“ 0”之类的两个例外。如今,人们使用C来实现诸如Python,Ruby,Apache或Linux内核之类的东西。这些项目无论如何都使用它们自己的所有数据结构,并且它们不太可能使用STL之类的东西。 许多C库都实现了通用哈希表。权衡利弊,您可以选择自己喜欢的。其中一些可使用回调进行配置。 Glib有一个哈希表对象(文档) Apache Portable Runtime具有哈希表(文档) Apple的Core Foundation库具有哈希表(文档)注意:是的,您可以插入任何对象作为键或值。 UTHash是哈希表库(文档) 另一个哈希表库(链接) 使用所有这些库可以满足您的需要,将哈希表添加到C标准的意义何在?     ,标准的C库不包含任何大型的持久数据结构-列表,树,堆栈,哈希表都没有。 如果不询问原始C库的作者,就不可能给出明确的答案。但是,一个合理的解释是,这种数据结构的实现涉及各种折衷,只有应用程序的作者才能做出这些折衷。 请注意,POSIX标准C库确实指定了通用哈希表函数:“ 1”,“ 2”和“ 3”;并且还请注意,它们的“一刀切”适用于所有实际情况,往往使它们不足以支持上述论点。     ,由于缺少模板 这只是一个猜测,但是没有像C ++这样的语言就没有模板,这使得实现容器非常不雅致,因为您需要数十个定义来涵盖所有可能的类型,更不用说用户定义的类型了。 有C策略可以缓解这种情况,例如与
void *
玩耍,但是它们丢失了编译时类型检查。 GLib和gnulib是目前推荐的实现:在C中实现Dictionary的快速方法     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...