在c中存储已知的键/值对

我正在学习c。 我正在写一个Web服务器作为练习。
现在我必须存储状态代码和原因短语。

存储这些键/值对的最佳方法是什么?

我的第一个赌注是散列图。 但是c中没有本机实现。 所以我必须使用一个库。

像其他答案一样,我也建议只使用字符串数组作为查找表。 如果假设所有状态代码都是唯一的,那么对于较小的数据集,字符串数组是最简单的实现。

一旦开始存储大量数据,那就是当hashmaps开始变得有用时。 查找数组就是这里的解决方案,但是正如你所说的那样,你正在学习C,你可以通过使用动态内存(一个学习C的关键概念)在本机C中实现一个哈希表。这个网站解释了如何创建哈希表C非常好。

http://www.sparknotes.com/cs/searching/hashtables/section3.rhtml

我会使用一个排序的数组。

您可以按任何顺序定义数组,并使用qsort()函数在运行时(一次)对其进行排序。 然后你可以使用bsearch()进行二进制搜索。 响应代码的总数很小,二进制搜索会非常快。

对于像这样简单的事情,这样做的优点是不需要任何外部代码。

这是一个替代的想法,它具有速度的好处,同时具有一些内存开销。

基本上,最简单的哈希表forms,其中哈希函数是身份(代码 – >代码),也称为查找表。

要做到这一点,知道HTTP状态代码限制为5xx,您可以假设599将是您需要的最高值,因此您将创建一个包含600个元素的表。

这个表可以像这样完成:

 const char * status_messages[600]; 

初始化非常简单:

 /* initialize all with NULL's so invalid codes correspond to NULL pointers */ memset(status_messages, (int)NULL, 600 * sizeof(const char *)); /* ... */ status_messages[403] = "Forbidden"; status_messages[404] = "Not found"; /* ... */ 

查找消息也很简单:

 int code = 403; const char * message = status_messages[code]; 

此arrays大小为2400字节(64位平台上为4800),但访问时间保证为O(1)。

也许您可以在其中创建一个包含K \ V的结构。

像这样:

 struct key_value { int key; char* value; }; struct key_value kv; kv.key = 1; kv.value = "foo";