segmentmap

Crates.iosegmentmap
lib.rssegmentmap
version0.1.5
sourcesrc
created_at2022-09-18 21:09:04.443124
updated_at2023-10-12 16:53:59.009751
descriptionA collection that maintains insertion order
homepage
repositoryhttps://github.com/kilmanio/segmentmap
max_upload_size
id668800
size17,248
(kilmanio)

documentation

README

Segmentmap

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.

Benchmarking

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
Commit count: 21

cargo fmt