Crates.io | segmentmap |
lib.rs | segmentmap |
version | 0.1.5 |
source | src |
created_at | 2022-09-18 21:09:04.443124 |
updated_at | 2023-10-12 16:53:59.009751 |
description | A collection that maintains insertion order |
homepage | |
repository | https://github.com/kilmanio/segmentmap |
max_upload_size | |
id | 668800 |
size | 17,248 |
A generic collection that preserves the order of items at all cost. Removing an item never restructures, keys/indices are unique per item. Internally uses a HashMap of arrays containing the items. Also tested with an internal BTreeMap, but results were worse. Iterator is stable, using a linked-list-like structure.
Using an array size >128 makes the segmentmap significantly slower when inserting (>10%). Similar when you use a small array size (like 16). The smaller the array, the more similar it is to an indexmap, The larger the array, the more similar it is to an array (duh). (but in both cases it will still preserve order when removing, without restructuring).
More of a PoC than something you should start using.
These are the results of some very basic benchmarking I did (cargo run) against common collections. Listed are the durations of doing 1 million operations sequentially, so to get the average just divide by 1M.
type | adding 1M | iterating over 1M | deleting 1M sequentially |
---|---|---|---|
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 |