3个版本
0.1.5 | 2023年10月12日 |
---|---|
0.1.4 | 2023年6月19日 |
0.1.3 | 2022年9月18日 |
#2017 in 数据结构
每月556次下载
16KB
386 行
Segmentmap
一个通用的集合,不惜一切代价保留项目的顺序。删除项目时永远不会重新结构化,每个项目都有一个唯一的键/索引。内部使用包含项目的数组的 HashMap。还用内部 BTreeMap 测试过,但结果更差。迭代器是稳定的,使用类似链表的结构。
使用大于128的数组大小会使段映射在插入时(大于10%)显著变慢。当使用小的数组大小时(如16)也类似。数组越小,越类似于 indexmap,数组越大,越类似于数组(duh)。(但在两种情况下,删除时仍会保留顺序,而不会重新结构化)。
更像是PoC,而不是你可以开始使用的。
基准测试
以下是一些我进行的非常基本的基准测试(cargo run)的结果,针对常见的集合。列出的操作持续时间是进行100万次操作的时间,因此要获得平均值,只需除以100万。
类型 | 添加100万 | 遍历100万 | 按顺序删除100万 |
---|---|---|---|
SegmentMap | 654.97ms | 305.44ms | 312.97ms |
HashMap | 983.93ms | 37.15ms | 579.11ms |
BTreeMap | 2.48s | 97.58ms | 1.07s |
Vec | 36.67ms | 17.45ms | 10.25s |
依赖项
~72KB