Bean(TM) Nuts Pinecone for C/CPP
HashMap/Set

摘要

HashMap参考STL unordered_map、JDK HashMap、PHP Array设计,为动态扩容、List/Tree 切换的架构,具有5个衍生子数据结构,HashSet、HashMap、LinkedHashMap、LinkedHashSet、Dictron,底层数据结构与算法基本类似,只不过对接口和API就行修改。
工程支持:支持迭代器(STL风格,兼容STL操作)、迭代器forEach适配器范式、支持运算符重载、内存安全无泄漏、支持对象模板、支持指定内存分配器、支持重写compare接口(C++风格),兼具C++、JDK双重风格。

预览

类定义

使用

性能 (比C++ unordered_map快,高冲突时内存消耗更多,因为存在树节点)

std::unordered_map: 1e6, 约260~300ms

LinkedHashMap: 1e6, 约180~210ms

HashMap: 1e6, 约210~240ms, 析构函数消耗较大

技术特性(优化特性)

与java不同,对List/Tree节点标记不采用instanceof(C++下是DynamicCast)这类方法,而使用枚举变量

节点替换时,对于List节点直接升级替换,而Tree节点只标记而不触发内存申请 (尚未完成的优化:超阈值回收)

Author:undefined  Create time:2023-07-29 15:57
Last editor:undefined  Update time:2023-07-29 19:23