ree_data(void* data, void *arg) { userdata *dat = (userdata *) data; /* 删除整个子 map */ hashmap_destroy(dat->map, free_elem, 0); free(dat); return 0; } int main(int argc, char* argv[]) { hmap_t map; userdata *dat; userelem *el; int ret, i, j; /* 创建 hashmap */ map = hashmap_create(); /* 插入 hashmap 元素 */ for (i=0; i<100; i++) { dat = (userdata *)malloc(sizeof(userdata)); /* 创建子 hashmap */ dat->map = hashmap_create(); /* 插入子 hashmap 元素 */ for (j=0; j<10; j++) { el = (userelem *)malloc(sizeof(userelem)); sprintf(el->key, "%d", j); el->value = (char*) malloc(30); sprintf(el->value, "%d", j+1000); ret = hashmap_put(dat->map, el->key, el); assert(ret==HMAP_S_OK); } sprintf(dat->name, "%d", i); ret = hashmap_put(map, dat->name, dat); assert(ret==HMAP_S_OK); } printf("hashmap_size: %d\n", hashmap_size(map)); /* 删除指定元素: key="10" */ ret = hashmap_remove(map, "10", &dat); assert(ret==HMAP_S_OK); printf("hashmap_remove: name=%s. size=%d\n", dat->name, hashmap_size(map)); hashmap_iterate(dat->map, iter_elem, 0); free_data(dat, 0); /* 删除指定元素: key="11" */ ret = hashmap_remove(map, "11", &dat); assert(ret==HMAP_S_OK); printf("hashmap_remove: name=%s. size=%d\n", dat->name, hashmap_size(map)); hashmap_iterate(dat->map, iter_elem, 0); free_data(dat, 0); /* 查询元素: key="99" */ ret = hashmap_get(map, "99", &dat); assert(ret==HMAP_S_OK); printf("hashmap_get: name=%s. size=%d\n", dat->name, hashmap_size(map)); hashmap_iterate(dat->map, iter_elem, 0); /* 删除整个 map */ hashmap_destroy(map, free_data, 0); _CrtDumpMemoryLeaks(); return 0; } 作者:cheungmine
|