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

时间:2010-12-29 05:23:49

标签: c data-structures

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

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

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

然后访问它们:

var squareRootOf25 = squareRoots[5]

我如何在C中执行此操作?如果我想使用一种类型的枚举作为键和另一种类型的枚举作为值,该怎么办?

4 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:3)

您可以考虑使用C语言实现哈希,以实现此目的。 有关哈希的基础知识,请参阅Wikipedia。 有关详细信息和链接,请参阅此question

link提供了良好的概述和实施细节。

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:0)

您可以使用map作为clib

的一部分实施的{{3}}