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库的一部分实现的映射