利用uthash.h实现hashmap-创新互联

下载uthash.h

【官网下载】:官网下载

创新互联建站主要从事成都网站制作、网站设计、外贸网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务德清,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792

下载zip后,找到src目录,将其复制到C语言的头文件夹中。

如果使用的是vs:
1.随便打开一个c语言的文件,ctrl+鼠标正建打开头文件。
2.在这里插入图片描述
打开文件夹后,复制进去,重启vs即可。

使用 定义结构体
typedef struct my_map{int key;
    int value;
    UT_hash_handle hh; // make this structure hashable
}map;
//结构体中的key与value的类型可以根据情况自己定义
map* hashMap = NULL;
添加元素
void hashMapAdd(int key,int value) {map* s;
    HASH_FIND_INT(hashMap, &key, s);
    if (s == NULL) {s = (map*)malloc(sizeof(map));
        s->key = key;
        HASH_ADD_INT(hashMap, key, s);
    }
    s->value = value;
}
​	 HASH_FIND_INT(hashMap, &key, s);
​		hashmap:从哪里查找,传入指针
​		key:查找的元素,传入指针
​		s:out,结构存放,指针
HASH_ADD_INT(hashMap, key, s);
​		hashmap:添加到哪里,传入指针
​		key:添加的元素
​		s:要添加的结构指针
HASH_ADD_INT表示添加的键值为int类型
HASH_ADD_STR表示添加的键值为字符串类型
HASH_ADD_PTR表示添加的键值为指针类型
HASH_ADD表示添加的键值可以是任意类型
查找
int hashMapFind(int key) {map* s;
    s = (map*)malloc(sizeof(map));
    HASH_FIND_INT(hashMap, &key, s);
    return s->value;
}
删除
void hashMapDelete(int key) {map* s;
    HASH_FIND_INT(hashMap, &key, s);
    if (s != NULL) {HASH_DEL(hashMap, s);
    }
}
清除
void  hashMapClean() {map* current, * tmp;
    HASH_ITER(hh, hashMap, current, tmp) {HASH_DEL(hashMap, current);
        free(current);
    }
}
遍历
void Traverse() {map* s;
    for (s = hashMap; s != NULL; s = s->hh.next) {printf("key: % d, value : % d\n", s->key, s->value);
    }
}
全部代码
#includetypedef struct my_map{int key;
    int value;
    UT_hash_handle hh; // make this structure hashable
}map;

map* hashMap = NULL;

void hashMapAdd(int key,int value) {map* s;
    HASH_FIND_INT(hashMap, &key, s);
    if (s == NULL) {s = (map*)malloc(sizeof(map));
        s->key = key;
        HASH_ADD_INT(hashMap, key, s);
    }
    s->value = value;
}

int hashMapFind(int key) {map* s;
    s = (map*)malloc(sizeof(map));
    HASH_FIND_INT(hashMap, &key, s);
    return s->value;
}
void hashMapDelete(int key) {map* s;
    HASH_FIND_INT(hashMap, &key, s);
    if (s != NULL) {HASH_DEL(hashMap, s);
    }
}
void  hashMapClean() {map* current, * tmp;
    HASH_ITER(hh, hashMap, current, tmp) {HASH_DEL(hashMap, current);
        free(current);
    }

}

void Traverse() {map* s;
    for (s = hashMap; s != NULL; s = s->hh.next) {printf("key: % d, value : % d\n", s->key, s->value);
    }
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


新闻标题:利用uthash.h实现hashmap-创新互联
文章路径:http://ybzwz.com/article/pojpc.html