概述:在自己项目中,数据处理过程我们或多或少可能都会用到哈希表,而自己去实现麻烦,效率又低。我就找了开源库uthash,这个库哈希表的实现,就是一个头文件(uthash.h)就实现了。但在我们具体使用,可能还是需要自己再封装一层,这样用起来可能更加方便简洁一些。因为也是刚接触这个一天,所以就先自己需要,封装了一个支持key值为int类型的哈希表。
1,创建了一个sky_hash.c和一个sky_hash.h用于封装。那我们先看一下.h文件吧。主要封装了哈希表的基本结构。
#ifndef _SKY_HASH_H_
#define _SKY_HASH_H_
#include <stdlib.h>
#include "uthash.h"
typedef struct hash_data hash_data_t;
typedef void (*hash_cb_t)(hash_data_t *, void *arg);
struct hash_data {
int key; /* key */
void *data; /*数据*/
UT_hash_handle hh; /* makes this structure hashable */
};
hash_data_t *sky_hash_find(hash_data_t **hashlist, int key);
int sky_hash_add(hash_data_t **hashlist, int key, void *data);
int sky_hash_del(hash_data_t **hashlist, int key);
void sky_hash_delall(hash_data_t **hashlist);
int sky_hash_count(hash_data_t **hashlist);
void sky_hash_ergodic(hash_data_t **hashlist, hash_cb_t callback, void *arg);
#endif
2,贴一下sky_hash.c文件的内容,其实也没有做太多东西,就是把uthash封装好的函数再封装一层。所以,只要看一下uthash文档就可以看懂这个封装了。
#include <stdio