在php
我可以创建associative array
喜欢
$my_arr = array('a' => 'Apple', 'b' => 'Ball', 'c' => 'Cat');
是否可以在associative array
C
您可能认为这是Associative arrays in C的重复问题,但我无法找到我想要的内容。
答案 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";
答案 2 :(得分:0)
正如其他人所说,C太低级别,无法拥有内置的关联数组类型。您最接近的可能是使用http://svn.freebsd.org/base/head/sys/sys/tree.h中记录的http://www.freebsd.org/cgi/man.cgi?tree或http://ivoras.sharanet.org/freebsd/usetree.html中记录的第三方库。