C中的字典/地图/键值对数据结构

如何在C中构造和访问一组键值对? 使用一个愚蠢的简单示例,假设我想创建一个在整数和平方根之间进行转换的表。

如果我正在编写javascript,我可以这样做:

var squareRoots = { 4: 2, 9: 3, 16: 4, 25: 5 } 

然后访问它们像:

 var squareRootOf25 = squareRoots[5] 

在C中最好的方法是什么? 如果我想使用一种类型的枚举作为键而另一种类型的枚举作为值,该怎么办?

您可以考虑使用C语言实现哈希,以实现此目的。 有关哈希的基础知识,请参阅维基百科 。 有关更多详细信息和链接,请参阅此问题 。

此链接提供了良好的概述和实施细节。

没有内置的方法来做到这一点,除非你计算在C99中初始化这样的数组:

 double squareRoots[] = { [4] = 2.0, [9] = 3.0, [16] = 4.0, [25] = 5.0, }; 

但是,这会在数组中分配26个元素; 其他值都是零。

假设你不是这个意思,那么请看看DR Hanson的C接口和实现 ; 它显示了一种实现关联数组(也就是哈希或字典)的方法。

您也可以将libghthash用于通用哈希。 它们非常易于使用,并且可以在您的应用程序中使用。 但是,它是第三方API – 所以如果这是一个问题,你必须实现自己的。

C中没有内置的关联数组/哈希表。

除非你有非数字键,否则数组初始化(C99)可能是最好的方法:

 T hash[] = { [1] = tObj, [255] = tObj2, }; 

您可以使用作为clib库的一部分实现的映射