#map #set #vec #no-std #keyed-set

no-std vecset

A vector-based sorted map, set and keyed-set implementation

2 releases

new 0.0.2 Apr 18, 2024
0.0.1 Feb 7, 2024

#1030 in Data structures

Download history 38/week @ 2024-02-05 15/week @ 2024-02-19 18/week @ 2024-02-26 9/week @ 2024-03-04 7/week @ 2024-03-11 39/week @ 2024-03-25 38/week @ 2024-04-01 29/week @ 2024-04-08 224/week @ 2024-04-15

330 downloads per month

MIT/Apache

160KB
2.5K SLoC

vecset

Build Status crates.io docs.rs License: Apache 2.0 License: MIT

A vector-based sorted map and set implementation with zero dependencies and support for #![no_std].

The crate provides VecMap, VecSet and KeyedVecSet which are basically a map interface wrapper of sorted vectors. For all types, searching is O(n) using Vec::binary_search.

VecMap<K, V> is a map interface for a sorted vector Vec<(K, V)>. It is a wrapper of KeyedVecSet specialization KeyedVecSet<K, (K, V)>.

VecSet<T> is a set interface for a sorted vector Vec<T>. It is a wrapper of KeyedVecSet specialization KeyedVecSet<T, T>. This is also same as sorting-guaranteed Vec<T>.

KeyedVecSet<K, V> is a generalized interface of a sorted vector Vec<V> where V: Keyed<K>. It means V provides a key value using the key accessor <V as Keyed<K>>::key() -> &K. This is useful when value contains its own key. Accessing mutable reference of KeyedVecSet elements is unsafe because editing the key value may corrupt sorting of the container. The same functions will be safe for VecMap by hiding the key part from mutable reference.

Map keys are required to form a total order.

Cargo features

The following features are available:

  • serde: Provides Serialize and Deserialize implementations for VecMap and VecSet. This feature is disabled by default. Enabling it will pull in serde as a dependency.

License

The source code of vecset is licensed under either of Apache License, Version 2.0 or MIT license at your option.

Thanks to vecmap-rs, the first version of this project based on.

Dependencies

~185KB