3个不稳定版本
0.2.0 | 2023年9月27日 |
---|---|
0.1.1 | 2022年5月6日 |
0.1.0 | 2022年4月24日 |
#1896 in 数据结构
205KB
3.5K SLoC
关于
CycleMap提供了几个“双向”哈希映射,用于在两个集合之间关联项目。它通过不保留重复数据并保持与标准HashMap相当的查找速度来实现这一点。
您可能会以许多方式在集合之间映射项目。CycleMap支持三种。
- 双射映射:两个集合中的每个项目都配对,并且与正好一个其他项目配对
- 部分双射映射:集合中的项目不一定需要配对,但任何配对的项目都正好与一个其他项目配对
- (弱)满射映射:左侧集合中的每个项目都恰好与一个右侧项目配对,而右侧集合中的项目可以与多个(或没有)来自左侧的项目配对
工作原理
每个映射包含两个集合,一个左侧集合和一个右侧集合。当两个项目配对时,它们形成一个循环。也就是说,来自任一集合的项目都可以用来唯一地查找与之配对的项目。这形成了一个循环查找,是所有循环映射背后的核心算法。
CycleMap不保留自引用指针,而是将项目与其配对项目的哈希(和id)配对。这防止了可能出现的未知内存错误,并使映射调整大小更快,因为项目不需要“知道”其配对项目的位置,而只需要知道如何到达那里。
为什么使用
CycleMap并不是用来替代标准哈希映射的。事实上,它是在其之上构建的。相反,它们提供了一种快速双向查找的干净解决方案。
如果您发现自己在创建这类问题的解决方案,请尝试CycleMap。
贡献
如果您想为此库做出贡献或进行改进,请这样做。分叉此项目或提交一个功能/修复/更改等的issue或pull request。我唯一的要求是派生/迭代库必须是开源的,并且最好是具有相同许可(LGPL v3)。任何使用此库的应用程序或库都可以使用任何许可。
未来计划
CycleMap
结构有一个对应的结构体,PartialCycleMap
。此结构体通过允许集合中的未配对项目来放宽了CycleMap
的要求。计划创建一个类似的PartialGroupMap
结构体来模仿GroupMap
结构体。
依赖关系
~0.8–1.2MB
~19K SLoC