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