arbitrary.rs |
|
2238 |
borsh.rs |
|
3142 |
lib.rs |
[`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 [`Equivalent`] trait, 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 on [`no_std`].
* `rayon`: Enables parallel iteration and other parallel methods.
* `serde`: Adds implementations for [`Serialize`] and [`Deserialize`]
to [`IndexMap`] and [`IndexSet`]. Alternative implementations for
(de)serializing [`IndexMap`] as an ordered sequence are available in the
[`map::serde_seq`] module.
* `borsh`: Adds implementations for [`BorshSerialize`] and [`BorshDeserialize`]
to [`IndexMap`] and [`IndexSet`].
* `arbitrary`: Adds implementations for the [`arbitrary::Arbitrary`] trait
to [`IndexMap`] and [`IndexSet`].
* `quickcheck`: Adds implementations for the [`quickcheck::Arbitrary`] trait
to [`IndexMap`] and [`IndexSet`].
_Note: only the `std` feature is enabled by default._
[feature flags]: https://doc.rust-lang.org/cargo/reference/manifest.html#the-features-section
[`no_std`]: #no-standard-library-targets
[`Serialize`]: `::serde::Serialize`
[`Deserialize`]: `::serde::Deserialize`
[`BorshSerialize`]: `::borsh::BorshSerialize`
[`BorshDeserialize`]: `::borsh::BorshDeserialize`
[`arbitrary::Arbitrary`]: `::arbitrary::Arbitrary`
[`quickcheck::Arbitrary`]: `::quickcheck::Arbitrary`
### 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 fnv::FnvBuildHasher;
use fxhash::FxBuildHasher;
use indexmap::{IndexMap, IndexSet};
type FnvIndexMap<K, V> = IndexMap<K, V, FnvBuildHasher>;
type FnvIndexSet<T> = IndexSet<T, FnvBuildHasher>;
type FxIndexMap<K, V> = IndexMap<K, V, FxBuildHasher>;
type FxIndexSet<T> = IndexSet<T, FxBuildHasher>;
let std: IndexSet<i32> = (0..100).collect();
let fnv: FnvIndexSet<i32> = (0..100).collect();
let fx: FxIndexSet<i32> = (0..100).collect();
assert_eq!(std, fnv);
assert_eq!(std, fx);
```
### 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 without `std`.
Use methods [`IndexMap::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 crate `twox-hash`.
- Macros [`indexmap!`] and [`indexset!`] are unavailable without `std`. |
8773 |
macros.rs |
|
5395 |
map |
|
|
map.rs |
[`IndexMap`] is a hash table where the iteration order of the key-value
pairs is independent of the hash values of the keys. |
46720 |
rayon |
|
|
rustc.rs |
Minimal support for `rustc-rayon`, not intended for general use. |
3894 |
serde.rs |
|
4453 |
set |
|
|
set.rs |
A hash set implemented using [`IndexMap`] |
37713 |
util.rs |
|
1508 |