hashtable哈希表可以实现O(1)伟大度的读写操纵,因此服从很高。源码如下:
- typedef struct dict {
- // 范例特定函数
- dictType *type;
- // 私稀有据
- void *privdata;
- // 哈希表
- dictht ht[2];
- // rehash 索引
- // 当 rehash 不在举办时,值为 -1
- int rehashidx; /* rehashing not in progress if rehashidx == -1 */
- // 今朝正在运行的安详迭代器的数目
- int iterators; /* number of iterators currently running */
- } dict;
- typedef struct dictht {
- // 哈希表数组
- dictEntry **table;
- // 哈希表巨细
- unsigned long size;
- // 哈希表巨细掩码,用于计较索引值
- // 老是便是 size - 1
- unsigned long sizemask;
- // 该哈希表已有节点的数目
- unsigned long used;
- } dictht;
- typedef struct dictEntry {
- void *key;
- union {void *val;uint64_t u64;int64_t s64;} v;
- // 指向下个哈希表节点,形成链表
- struct dictEntry *next;
- } dictEntry;
- typedef struct dictType {
- // 计较哈希值的函数
- unsigned int (*hashFunction)(const void *key);
- // 复制键的函数
- void *(*keyDup)(void *privdata, const void *key);
- // 复制值的函数
- void *(*valDup)(void *privdata, const void *obj);
- // 比拟键的函数
- int (*keyCompare)(void *privdata, const void *key1, const void *key2);
- // 烧毁键的函数
- void (*keyDestructor)(void *privdata, void *key);
- // 烧毁值的函数
- void (*valDestructor)(void *privdata, void *obj);
- } dictType;
上面源码可以简化成如下布局:
 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|