1 //------------------------------------------ 2 // c語言 開源hash項目 —— uthash 3 // 4 // 5 //eg: 對 字符串進行查找和刪除 字符指針 6 // 7 // warning: uthash 對 字符指針和字符數組, 8 // 插入的函數是不一樣的,查找的函數是一致的 9 // 對所有的類型,刪除的操作 10 //------------------------------------------- 11 12 #include "gtest/gtest.h" 13 #include <iostream> 14 using namespace std; 15 16 #include"uthash/uthash.h" 17 18 typedef struct { 19 int ikey; /* key */ 20 char value[10]; 21 UT_hash_handle hh; 22 }uthash_int; 23 24 // 查找 25 uthash_int *find_uthash_int(uthash_int *g_users, int ikey) 26 { 27 uthash_int *s = NULL; 28 HASH_FIND_INT(g_users, &ikey, s); // find int 29 return s; 30 } 31 32 // 插入 33 void add_uthash_int(uthash_int *g_users, int ikey, char *value_buf) 34 { 35 uthash_int *s = NULL; 36 HASH_FIND_INT(g_users, &ikey, s); /* 插入前先查看key值是否已經在hash表g_users里面了 */ 37 if (s == NULL) { 38 s = (uthash_int*)malloc(sizeof(uthash_int)); 39 s->ikey = ikey; 40 HASH_ADD_INT(g_users, ikey, s); /* 這里必須明確告訴插入函數,自己定義的hash結構體中鍵變量的名字 */ 41 } 42 strcpy(s->value, value_buf); 43 } 44 45 // 刪除 46 void delete_uthash_int(uthash_int *g_users, int ikey) 47 { 48 uthash_int *s = NULL; 49 HASH_FIND_INT(g_users, &ikey, s); 50 if (s == NULL) { 51 HASH_DEL(g_users, s); 52 free(s); 53 } 54 } 55 56 // clear 57 void clear_uthash_int(uthash_int *g_users) 58 { 59 uthash_int *current_user = NULL; 60 uthash_int *tmp = NULL; 61 HASH_ITER(hh, g_users, current_user, tmp) { 62 HASH_DEL(g_users, current_user); 63 free(current_user); 64 } 65 } 66 67 TEST(test, test_01) 68 { 69 70 }