我正在学习c.我正在写一个Web服务器作为练习.
现在我必须存储状态代码和原因短语.
存储这些键/值对的最佳方法是什么?
我的第一个赌注是哈希地图.但是c中没有本机实现.所以我必须使用一个库.
这是一个替代的想法,它具有速度的好处,同时具有一些内存开销.
基本上,最简单的哈希表形式,其中哈希函数是身份(代码 - >代码),也称为查找表.
要做到这一点,知道HTTP状态代码限制为5xx,您可以假设599将是您需要的最高值,因此您将创建一个包含600个元素的表.
这个表可以像这样完成:
const char * status_messages[600];
Run Code Online (Sandbox Code Playgroud)
初始化非常简单:
/* 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";
/* ... */
Run Code Online (Sandbox Code Playgroud)
查找消息也很简单:
int code = 403;
const char * message = status_messages[code];
Run Code Online (Sandbox Code Playgroud)
此阵列大小为2400字节(64位平台上为4800),但访问时间保证为O(1).
像其他答案一样,我也建议只使用一个字符串数组作为查找表.如果假设所有状态代码都是唯一的,那么对于较小的数据集,字符串数组是最简单的实现.
一旦开始存储大量数据,那就是当hashmaps开始变得有用时.查找数组就是这里的解决方案,但正如你所说,你正在学习C,你实际上可以通过使用动态内存(一个学习C的关键概念)在本机C中实现一个哈希表.这个网站解释了如何创建哈希表C非常好.
http://www.sparknotes.com/cs/searching/hashtables/section3.rhtml
| 归档时间: |
|
| 查看次数: |
24507 次 |
| 最近记录: |