写小东西需要用到哈希表这样的数据结构时候才后悔没用C++,最起码还有stl能用来着。虽说C也能搞泛型,不过宏实现的泛型…真的好恐怖。
tinyrb用了khash做哈希表,据作者说已经是一个稳定的实现了。
khash.h的内容:
http://attractivechaos.awardspace.com/khash.h.html
大体可以这么用:
#include "stdio.h" #include "khash.h" KHASH_MAP_INIT_STR(str, int) //以“str”这名字初始化一个类型的map,键类型为字符串,值类型为int int main() { int ret, is_missing; khiter_t k; //khash的索引器,好像就是个int khash_t(str) *h = kh_init(str); //str只是个名字,初始化 k = kh_put(str, h, "test", &ret); //“test”即键,ret判定操作是否成功,返回k为索引器 if (!ret) kh_del(str, h, k); //如果h中已经存在了这个键,就删除之 kh_value(h, k) = 10; //设置键“test”对应的值(10) printf("%d\n", kh_val(h,k)); //kh_val(h,k)即10 k = kh_get(str, h, "test"); //获得“test”对应的索引器k printf("%d\n", kh_val(h,k)); //得10 kh_destroy(str, h); return 0; }
终究不如模板来的自然,呵呵~不过也不错了。

那个作者真牛X,用宏实现泛型
@Kingsamchen 呵呵,是啊~
作者还写了个c的vector、tree、排序的泛型实现http://attractivechaos.awardspace.com/
一直觉得template就是加强版的宏,都是编译期执行的代码。不过模板的确要好看多了
template比macro强的不止一点点啊……
虽然我不太喜欢template
哈希,有爱的结构啊~
@wangweinoo1 解放生产力的伟大发明啊