繁体   English   中英

C中的关联数组

[英]Associative array in C

php我可以创建一个associative array例如

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

是否可以在C创建associative array

您可能认为这是C 中关联数组的重复问题,但我找不到我想要的。

标准 C 中没有预先构建的实用程序来完成此任务。 最好的办法是尝试自己实现红黑树(或非有序关联容器的哈希表)。

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

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

活生生的例子

真正强大而简单的方法是拥有一个带有键和值字段的结构。 让我们称它为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;  

有了它,您可以在任何地方分配键值对,而无需将它们包含在单个数组中。

正如其他人所说,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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM