2014年02月06日 星期四 10:40
我期待C语言标准库在下一个版本中加入Hash Tables数据结构,因为这个数据结构的需求太多了。GLib库提供了一组Hash Tables的实现,编程示例如下:
#include <stdio.h> #include <glib.h> #include <string.h> #include <stdlib.h> void my_free(gpointer data) { GString *s=(GString *)data; printf("freeing: %s\n",s->str); g_string_free(s,TRUE); return; } void g_hash_table_print_gstring( gpointer key,gpointer val,gpointer user_data) { GString *skey=(GString *)key; GString *sval=(GString *)val; printf("%s => %s\n",skey->str,sval->str); return; } guint my_hash(gconstpointer key){ return g_string_hash((GString *)key); } gboolean my_equal(gconstpointer a, gconstpointer b) { return g_string_equal((GString *)a,(GString *)b); } int main(int argc,char **argv) { GHashTable *ht=g_hash_table_new(g_str_hash,g_str_equal); g_hash_table_destroy(ht); ht=g_hash_table_new_full(my_hash,my_equal,my_free,my_free); GString *key,*val; key=g_string_new("laomeng"); val=g_string_new("laomeng188@163.com"); g_hash_table_insert(ht,key,val); key=g_string_new("laozhang"); val=g_string_new("laozhang@163.com"); g_hash_table_insert(ht,key,val); key=g_string_new("laoli"); val=g_string_new("laoli@qq.com"); g_hash_table_insert(ht,key,val); g_hash_table_foreach(ht,g_hash_table_print_gstring,NULL); g_hash_table_remove_all(ht); g_hash_table_destroy(ht); return 0; }
需要注意的是,与C++ STL容器不同,GLib的Hash Tables在插入数据时,不会对key、value数据进行复制,用户需要自己维护这部分内存。
参考资料:
Zeuux © 2024
京ICP备05028076号