Threaded Red-Black Tree 线索红黑树

 使用 libavl 中的 trb ,经过修改,实现了一个更高效的版本,并且也支持范围查询。对基本类型的key,实现高效search支持 lower_bound/upper_bound/equal_range结点采用压缩方式,将colorbit(1bit)和tagbit(2bit)压缩到指针中从而每个结点的overhead是2ptr(32位环境下8byte,64位环境下16bits)stl::map/stl::set 的节点overhead 一般是 4ptrkey的访问使用fieldoffset,C标准中有 offsetof(T,f) 宏来计算字段偏移因为使用C模拟template,从而没有C++的代码膨胀问题C接口需要手工打造vtablevtable指针通过参数传递,而不是将它作为trb_tree的一部分,更节约内存也许仅仅一个vtable指针用不了多少内存但是当有若干个【在我的应用中,大约2M个】trb_tree时,节省的内存相当可观使用C实现核心功能,同时提供更易用的C++接口(trbset/trbmap/trbtab)类似stl中的相应东西trbset相当于stl:

你可能感兴趣的:(Threaded Red-Black Tree 线索红黑树)