C中的关联数组

时间:2014-04-07 09:30:38

标签: php c

php我可以创建associative array喜欢

$my_arr = array('a' => 'Apple', 'b' => 'Ball', 'c' => 'Cat');

是否可以在associative array

中创建C

您可能认为这是Associative arrays in C的重复问题,但我无法找到我想要的内容。

3 个答案:

答案 0 :(得分:2)

真正健壮且简单的方法是使用包含键和值字段的结构。让我们称它为pair(从同名和目的的C ++类派生的名称)。您还应该考虑您希望对于字段对应的类型。我给出一个示例作为字符串值的字符串作为您的PHP示例。但是为了使用不同的类型,你必须使用void *,但这会导致一个非常复杂且可能容易出错的实现。

这样的东西
struct
{
    char key;
    char* value;
}pair;

struct pair map[size];

pair assocation;
assocation.key = 'a';
assocation.value = "Apple"; // Be sure to allocate the C strings so that you do not introduce memory leak or data corruption, same for void*. This here is just an hack.

map[0] = assocation;  

// Later in your algorithms and parsers you just access it as an value in array.  
pair aPair = map[1];
char aKey = aPair.key;
char* aValue = aPair.value;

当你想要一个像关联数组这样的链表时,再向结构添加一个字段:

void* nextPair;  

这样你可以在任何地方为你分配键值对,而不需要将它们包含在一个数组中。

答案 1 :(得分:1)

标准C中没有用于完成此任务的预构建实用程序。您最好的方法是尝试自己实现red-black tree(或hash table非有序关联容器)。

如果您有幸使用C ++,另一方面,您可以使用std::map。以下是std::map的示例:

std::map<char, std::string> map;
map['a'] = "Apple";
map['b'] = "Ball";
map['c'] = "Cat";

Live example

答案 2 :(得分:0)

正如其他人所说,C太低级别,无法拥有内置的关联数组类型。您最接近的可能是使用http://svn.freebsd.org/base/head/sys/sys/tree.h中记录的http://www.freebsd.org/cgi/man.cgi?treehttp://ivoras.sharanet.org/freebsd/usetree.html中记录的第三方库。