indexmap - Rust (original) (raw)
Expand description
IndexMap is a hash table where the iteration order of the key-value pairs is independent of the hash values of the keys.
IndexSet is a corresponding hash set using the same implementation and with similar properties.
§Highlights
IndexMap and IndexSet are drop-in compatible with the std HashMap
and HashSet
, but they also have some features of note:
- The ordering semantics (see their documentation for details)
- Sorting methods and the .pop() methods.
- The Equivalent trait, which offers more flexible equality definitions between borrowed and owned versions of keys.
- The MutableKeys trait, which gives opt-in mutable access to map keys, and MutableValues for sets.
§Feature Flags
To reduce the amount of compiled code in the crate by default, certain features are gated behind feature flags. These allow you to opt in to (or out of) functionality. Below is a list of the features available in this crate.
std
: Enables features which require the Rust standard library. For more information see the section on no_std.rayon
: Enables parallel iteration and other parallel methods.serde
: Adds implementations for Serialize and Deserializeto IndexMap and IndexSet. Alternative implementations for (de)serializing IndexMap as an ordered sequence are available in themap::serde_seq module.arbitrary
: Adds implementations for the arbitrary::Arbitrary trait to IndexMap and IndexSet.quickcheck
: Adds implementations for the quickcheck::Arbitrary trait to IndexMap and IndexSet.borsh
(deprecated): Adds implementations for BorshSerialize andBorshDeserialize to IndexMap and IndexSet. Due to a cyclic dependency that arose between borsh andindexmap
,borsh v1.5.6
added anindexmap
feature that should be used instead of enabling the feature here.
Note: only the std
feature is enabled by default.
§Alternate Hashers
IndexMap and IndexSet have a default hasher typeS = RandomState, just like the standard HashMap
and HashSet
, which is resistant to HashDoS attacks but not the most performant. Type aliases can make it easier to use alternate hashers:
use fnv::FnvBuildHasher;
use indexmap::{IndexMap, IndexSet};
type FnvIndexMap<K, V> = IndexMap<K, V, FnvBuildHasher>;
type FnvIndexSet<T> = IndexSet<T, FnvBuildHasher>;
let std: IndexSet<i32> = (0..100).collect();
let fnv: FnvIndexSet<i32> = (0..100).collect();
assert_eq!(std, fnv);
§Rust Version
This version of indexmap requires Rust 1.63 or later.
The indexmap 2.x release series will use a carefully considered version upgrade policy, where in a later 2.x version, we will raise the minimum required Rust version.
§No Standard Library Targets
This crate supports being built without std
, requiring alloc
instead. This is chosen by disabling the default “std” cargo feature, by addingdefault-features = false
to your dependency specification.
- Creating maps and sets using new andwith_capacity is unavailable without
std
. Use methods IndexMap::default, with_hasher,with_capacity_and_hasher instead. A no-std compatible hasher will be needed as well, for example from the cratetwox-hash
. - Macros indexmap! and indexset! are unavailable without
std
. Use the macros indexmap_with_default! and indexset_with_default! instead.
pub use crate::map::[IndexMap](map/struct.IndexMap.html "struct indexmap::map::IndexMap");
pub use crate:📐:[IndexSet](set/struct.IndexSet.html "struct indexmap:📐:IndexSet");
IndexMap is a hash table where the iteration order of the key-value pairs is independent of the hash values of the keys.
A hash set implemented using IndexMap
indexmapstd
Create an IndexMap from a list of key-value pairs
Create an IndexMap from a list of key-value pairs and a BuildHasherDefault-wrapped custom hasher.
indexsetstd
Create an IndexSet from a list of values
Create an IndexSet from a list of values and a BuildHasherDefault-wrapped custom hasher.
The error type for try_reserve methods.
The error type returned by get_disjoint_indices_mut.
Key equivalence trait.