3个版本

0.1.5 2023年10月12日
0.1.4 2023年6月19日
0.1.3 2022年9月18日

#2017 in 数据结构

Download history 8/week @ 2024-04-14 27/week @ 2024-04-21 25/week @ 2024-04-28 11/week @ 2024-05-05 11/week @ 2024-05-12 16/week @ 2024-05-19 89/week @ 2024-05-26 72/week @ 2024-06-02 58/week @ 2024-06-09 84/week @ 2024-06-16 144/week @ 2024-06-23 212/week @ 2024-06-30 48/week @ 2024-07-07 136/week @ 2024-07-14 204/week @ 2024-07-21 135/week @ 2024-07-28

每月556次下载

MIT许可证

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