17 releases

0.8.0 May 7, 2025
0.7.5 Feb 26, 2025
0.7.4 Nov 23, 2024
0.7.3 May 28, 2024
0.1.1 Mar 4, 2021

#16 in Data structures

Download history 1685091/week @ 2025-02-01 1743794/week @ 2025-02-08 1860536/week @ 2025-02-15 2447922/week @ 2025-02-22 2668830/week @ 2025-03-01 2709390/week @ 2025-03-08 2990328/week @ 2025-03-15 3252175/week @ 2025-03-22 2637996/week @ 2025-03-29 2861706/week @ 2025-04-05 2577700/week @ 2025-04-12 2547757/week @ 2025-04-19 2505125/week @ 2025-04-26 2661628/week @ 2025-05-03 2760432/week @ 2025-05-10 2384470/week @ 2025-05-17

10,730,516 downloads per month
Used in 32,719 crates (31 directly)

Unicode-3.0

135KB
2.5K SLoC

litemap crates.io

litemap

litemap is a crate providing LiteMap, a highly simplistic "flat" key-value map based off of a single sorted vector.

The main goal of this crate is to provide a map that is good enough for small sizes, and does not carry the binary size impact of HashMap or BTreeMap.

If binary size is not a concern, std::collections::BTreeMap may be a better choice for your use case. It behaves very similarly to LiteMap for less than 12 elements, and upgrades itself gracefully for larger inputs.

Performance characteristics

LiteMap is a data structure with similar characteristics as std::collections::BTreeMap but with slightly different trade-offs as it's implemented on top of a flat storage (e.g. Vec).

  • LiteMap iteration is generally faster than BTreeMap because of the flat storage.
  • LiteMap can be pre-allocated whereas BTreeMap can't.
  • LiteMap has a smaller memory footprint than BTreeMap for small collections (< 20 items).
  • Lookup is O(log(n)) like BTreeMap.
  • Insertion is generally O(n), but optimized to O(1) if the new item sorts greater than the current items. In BTreeMap it's O(log(n)).
  • Deletion is O(n) whereas BTreeMap is O(log(n)).
  • Bulk operations like from_iter, extend and deserialization have an optimized O(n) path for inputs that are ordered and O(n*log(n)) complexity otherwise.

Pluggable Backends

By default, LiteMap is backed by a Vec; however, it can be backed by any appropriate random-access data store, giving that data store a map-like interface. See the store module for more details.

Const construction

LiteMap supports const construction from any store that is const-constructible, such as a static slice, via [LiteMap::from_sorted_store_unchecked()]. This also makes LiteMap suitable for use with databake. See impl Bake for LiteMap for more details.

More Information

For more information on development, authorship, contributing etc. please visit ICU4X home page.

Dependencies

~165KB