Crate indexmap
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()][IndexMap::pop] methods. - The
Equivalenttrait, which offers more flexible equality definitions between borrowed and owned versions of keys. - The [
MutableKeys][map::MutableKeys] trait, which gives opt-in mutable access to map keys, and [MutableValues][set::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 onno_std.rayon: Enables parallel iteration and other parallel methods.serde: Adds implementations forSerializeandDeserializetoIndexMapandIndexSet. Alternative implementations for (de)serializingIndexMapas an ordered sequence are available in themap::serde_seqmodule.arbitrary: Adds implementations for thearbitrary::Arbitrarytrait toIndexMapandIndexSet.quickcheck: Adds implementations for thequickcheck::Arbitrarytrait toIndexMapandIndexSet.borsh(deprecated): Adds implementations forBorshSerializeandBorshDeserializetoIndexMapandIndexSet. Due to a cyclic dependency that arose betweenborshandindexmap,borsh v1.5.6added anindexmapfeature 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 type
[S = RandomState][std::collections::hash_map::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 FnvBuildHasher;
use ;
type FnvIndexMap<K, V> = ;
type FnvIndexSet<T> = ;
let std: = .collect;
let fnv: = .collect;
assert_eq!;
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 adding
default-features = false to your dependency specification.
- Creating maps and sets using [
new][IndexMap::new] and [with_capacity][IndexMap::with_capacity] is unavailable withoutstd. Use methodsIndexMap::default, [with_hasher][IndexMap::with_hasher], [with_capacity_and_hasher][IndexMap::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 withoutstd. Use the macros [indexmap_with_default!] and [indexset_with_default!] instead.
Modules
Structs
- IndexMap A hash table where the iteration order of the key-value pairs is independent of the hash values of the keys.
- IndexSet A hash set where the iteration order of the values is independent of their hash values.
-
TryReserveError
The error type for [
try_reserve][IndexMap::try_reserve] methods.
Enums
-
GetDisjointMutError
The error type returned by [
get_disjoint_indices_mut]IndexMap::get_disjoint_indices_mut.
Traits
Macros
-
indexmap
Create an [
IndexMap][crate::IndexMap] from a list of key-value pairs -
indexmap_with_default
Create an [
IndexMap][crate::IndexMap] from a list of key-value pairs and a [BuildHasherDefault][core::hash::BuildHasherDefault]-wrapped custom hasher. -
indexset
Create an [
IndexSet][crate::IndexSet] from a list of values -
indexset_with_default
Create an [
IndexSet][crate::IndexSet] from a list of values and a [BuildHasherDefault][core::hash::BuildHasherDefault]-wrapped custom hasher.