-
2.0.0
-
MSRV: Rust 1.64.0 or later is now required.
-
The
"std"
feature is no longer auto-detected. It is included in the default feature set, or else can be enabled like any other Cargo feature. -
The
"serde-1"
feature has been removed, leaving just the optional"serde"
dependency to be enabled like a feature itself. -
IndexMap::get_index_mut
now returnsOption<(&K, &mut V)>
, changing the key part from&mut K
to&K
. There is also a new alternativeMutableKeys::get_index_mut2
to access the former behavior. -
The new
map::Slice<K, V>
andset::Slice<T>
offer a linear view of maps and sets, behaving a lot like normal[(K, V)]
and[T]
slices. Notably, comparison traits likeEq
only consider items in order, rather than hash lookups, and slices even implementHash
. -
IndexMap
andIndexSet
now havesort_by_cached_key
andpar_sort_by_cached_key
methods which perform stable sorts in place using a key extraction function. -
IndexMap
andIndexSet
now havereserve_exact
,try_reserve
, andtry_reserve_exact
methods that correspond to the same methods onVec
. However, exactness only applies to the direct capacity for items, while the raw hash table still follows its own rules for capacity and load factor. -
The
Equivalent
trait is now re-exported from theequivalent
crate, intended as a common base to allow types to work with multiple map types. -
The
hashbrown
dependency has been updated to version 0.14. -
The
serde_seq
module has been moved from the crate root to below themap
module.
-
-
1.9.3
- Bump the
rustc-rayon
dependency, for compiler use only.
- Bump the
-
1.9.2
IndexMap
andIndexSet
both implementarbitrary::Arbitrary<'_>
andquickcheck::Arbitrary
if those optional dependency features are enabled.
-
1.9.1
- The MSRV now allows Rust 1.56.0 as well. However, currently
hashbrown
0.12.1 requires 1.56.1, so users on 1.56.0 should downgrade that to 0.12.0 until there is a later published version relaxing its requirement.
- The MSRV now allows Rust 1.56.0 as well. However, currently
-
1.9.0
-
MSRV: Rust 1.56.1 or later is now required.
-
The
hashbrown
dependency has been updated to version 0.12. -
IterMut
andValuesMut
now implementDebug
. -
The new
IndexMap::shrink_to
andIndexSet::shrink_to
methods shrink the capacity with a lower bound. -
The new
IndexMap::move_index
andIndexSet::move_index
methods change the position of an item from one index to another, shifting the items between to accommodate the move.
-
-
1.8.2
- Bump the
rustc-rayon
dependency, for compiler use only.
- Bump the
-
1.8.1
- The new
IndexSet::replace_full
will return the index of the item along with the replaced value, if any, by @zakcutner in PR 222.
- The new
-
1.8.0
-
The new
IndexMap::into_keys
andIndexMap::into_values
will consume the map into keys or values, respectively, matching Rust 1.54'sHashMap
methods, by @taiki-e in PR 195. -
More of the iterator types implement
Debug
,ExactSizeIterator
, andFusedIterator
, by @cuviper in PR 196. -
IndexMap
andIndexSet
now implement rayon'sParallelDrainRange
, by @cuviper in PR 197. -
IndexMap::with_hasher
andIndexSet::with_hasher
are nowconst
functions, allowing static maps and sets, by @mwillsey in PR 203. -
IndexMap
andIndexSet
now implementFrom
for arrays, matching Rust 1.56's implementation forHashMap
, by @rouge8 in PR 205. -
IndexMap
andIndexSet
now have methodssort_unstable_keys
,sort_unstable_by
,sorted_unstable_by
, andpar_*
equivalents, which sort in-place without preserving the order of equal items, by @bhgomes in PR 211.
-
-
1.7.0
-
MSRV: Rust 1.49 or later is now required.
-
The
hashbrown
dependency has been updated to version 0.11.
-
-
1.6.2
-
1.6.1
-
The new
serde_seq
module implementsIndexMap
serialization as a sequence to ensure order is preserved, by @cuviper in PR 158. -
New methods on maps and sets work like the
Vec
/slice methods by the same name:truncate
,split_off
,first
,first_mut
,last
,last_mut
, andswap_indices
, by @cuviper in PR 160.
-
-
1.6.0
-
MSRV: Rust 1.36 or later is now required.
-
The
hashbrown
dependency has been updated to version 0.9.
-
-
1.5.2
- The new "std" feature will force the use of
std
for users that explicitly want the defaultS = RandomState
, bypassing the autodetection added in 1.3.0, by @cuviper in PR 145.
- The new "std" feature will force the use of
-
1.5.1
-
1.5.0
-
MSRV: Rust 1.32 or later is now required.
-
The inner hash table is now based on
hashbrown
by @cuviper in PR 131. This also completes the methodreserve
and addsshrink_to_fit
. -
Add new methods
get_key_value
,remove_entry
,swap_remove_entry
, andshift_remove_entry
, by @cuviper in PR 136 -
Clone::clone_from
reuses allocations by @cuviper in PR 125 -
Add new method
reverse
by @linclelinkpart5 in PR 128
-
-
1.4.0
-
Add new method
get_index_of
by @Thermatrix in PR 115 and 120 -
Fix build script rebuild-if-changed configuration to use "build.rs"; fixes issue 123. Fix by @cuviper.
-
Dev-dependencies (rand and quickcheck) have been updated. The crate's tests now run using Rust 1.32 or later (MSRV for building the crate has not changed). by @kjeremy and @bluss
-
-
1.3.2
- Maintenance update to regenerate the published
Cargo.toml
.
- Maintenance update to regenerate the published
-
1.3.1
- Maintenance update for formatting and
autocfg
1.0.
- Maintenance update for formatting and
-
1.3.0
- The deprecation messages in the previous version have been removed. (The methods have not otherwise changed.) Docs for removal methods have been improved.
- From Rust 1.36, this crate supports being built without std, requiring
alloc
instead. This is enabled automatically when it is detected thatstd
is not available. There is no crate feature to enable/disable to trigger this. The new build-depautocfg
enables this.
-
1.2.0
-
Plain
.remove()
now has a deprecation message, it informs the user about picking one of the removal functionsswap_remove
andshift_remove
which have different performance and order semantics. Plain.remove()
will not be removed, the warning message and method will remain until further. -
Add new method
shift_remove
for order preserving removal on the map, andshift_take
for the corresponding operation on the set. -
Add methods
swap_remove
,swap_remove_entry
toEntry
. -
Fix indexset/indexmap to support full paths, like
indexmap::indexmap!()
-
Internal improvements: fix warnings, deprecations and style lints
-
-
1.1.0
-
Added optional feature
"rayon"
that adds parallel iterator support toIndexMap
andIndexSet
using Rayon. This includes all the regular iterators in parallel versions, and parallel sort. -
Implemented
Clone
formap::{Iter, Keys, Values}
andset::{Difference, Intersection, Iter, SymmetricDifference, Union}
-
Implemented
Debug
formap::{Entry, IntoIter, Iter, Keys, Values}
andset::{Difference, Intersection, IntoIter, Iter, SymmetricDifference, Union}
-
Serde trait
IntoDeserializer
are implemented forIndexMap
andIndexSet
. -
Minimum Rust version requirement increased to Rust 1.30 for development builds.
-
-
1.0.2
-
The new methods
IndexMap::insert_full
andIndexSet::insert_full
are both likeinsert
with the index included in the return value. -
The new method
Entry::and_modify
can be used to modify occupied entries, matching the new methods ofstd
maps in Rust 1.26. -
The new method
Entry::or_default
inserts a default value in unoccupied entries, matching the new methods ofstd
maps in Rust 1.28.
-
-
1.0.1
- Document Rust version policy for the crate (see rustdoc)
-
1.0.0
- This is the 1.0 release for
indexmap
! (the crate and datastructure formerly known as “ordermap”) OccupiedEntry::insert
changed its signature, to use&mut self
for the method receiver, matching the equivalent method for a standardHashMap
. Thanks to @dtolnay for finding this bug.- The deprecated old names from ordermap were removed:
OrderMap
,OrderSet
,ordermap!{}
,orderset!{}
. Use the newIndexMap
etc names instead.
- This is the 1.0 release for
-
0.4.1
- Renamed crate to
indexmap
; theordermap
crate is now deprecated and the typesOrderMap/Set
now have a deprecation notice.
- Renamed crate to
-
0.4.0
-
This is the last release series for this
ordermap
under that name, because the crate is going to be renamed toindexmap
(with typesIndexMap
,IndexSet
) and no change in functionality! -
The map and its associated structs moved into the
map
submodule of the crate, so that the map and set are symmetric- The iterators,
Entry
and other structs are now underordermap::map::
- The iterators,
-
Internally refactored
OrderMap<K, V, S>
so that all the main algorithms (insertion, lookup, removal etc) that don't use theS
parameter (the hasher) are compiled without depending onS
, which reduces generics bloat. -
Entry<K, V>
no longer has a type parameterS
, which is just like the standardHashMap
's entry. -
Minimum Rust version requirement increased to Rust 1.18
-
-
0.3.5
- Documentation improvements
-
0.3.4
- The
.retain()
methods forOrderMap
andOrderSet
now traverse the elements in order, and the retained elements keep their order - Added new methods
.sort_by()
,.sort_keys()
toOrderMap
and.sort_by()
,.sort()
toOrderSet
. These methods allow you to sort the maps in place efficiently.
- The
-
0.3.3
- Document insertion behaviour better by @lucab
- Updated dependences (no feature changes) by @ignatenkobrain
-
0.3.2
- Add
OrderSet
by @cuviper! OrderMap::drain
is now (too) a double ended iterator.
- Add
-
0.3.1
- In all ordermap iterators, forward the
collect
method to the underlying iterator as well. - Add crates.io categories.
- In all ordermap iterators, forward the
-
0.3.0
- The methods
get_pair
,get_pair_index
were both replaced byget_full
(and the same for the mutable case). - Method
swap_remove_pair
replaced byswap_remove_full
. - Add trait
MutableKeys
for opt-in mutable key access. Mutable key access is only possible through the methods of this extension trait. - Add new trait
Equivalent
for key equivalence. This extends theBorrow
trait mechanism forOrderMap::get
in a backwards compatible way, just some minor type inference related issues may become apparent. See #10 for more information. - Implement
Extend<(&K, &V)>
by @xfix.
- The methods
-
0.2.13
- Fix deserialization to support custom hashers by @Techcable.
- Add methods
.index()
on the entry types by @garro95.
-
0.2.12
- Add methods
.with_hasher()
,.hasher()
.
- Add methods
-
0.2.11
- Support
ExactSizeIterator
for the iterators. By @Binero. - Use
Box<[Pos]>
internally, saving a word in theOrderMap
struct. - Serde support, with crate feature
"serde-1"
. By @xfix.
- Support
-
0.2.10
- Add iterator
.drain(..)
by @stevej.
- Add iterator
-
0.2.9
- Add method
.is_empty()
by @overvenus. - Implement
PartialEq, Eq
by @overvenus. - Add method
.sorted_by()
.
- Add method
-
0.2.8
- Add iterators
.values()
and.values_mut()
. - Fix compatibility with 32-bit platforms.
- Add iterators
-
0.2.7
- Add
.retain()
.
- Add
-
0.2.6
- Add
OccupiedEntry::remove_entry
and other minor entry methods, so that it now has all the features ofHashMap
's entries.
- Add
-
0.2.5
- Improved
.pop()
slightly.
- Improved
-
0.2.4
- Improved performance of
.insert()
(#3) by @pczarn.
- Improved performance of
-
0.2.3
- Generalize
Entry
for now, so that it works on hashmaps with non-default hasher. However, there's a lingering compat issue since libstdHashMap
does not parameterize its entries by the hasher (S
typarm). - Special case some iterator methods like
.nth()
.
- Generalize
-
0.2.2
- Disable the verbose
Debug
impl by default.
- Disable the verbose
-
0.2.1
- Fix doc links and clarify docs.
-
0.2.0
- Add more
HashMap
methods & compat with its API. - Experimental support for
.entry()
(the simplest parts of the API). - Add
.reserve()
(placeholder impl). - Add
.remove()
as synonym for.swap_remove()
. - Changed
.insert()
to swap value if the entry already exists, and returnOption
. - Experimental support as an indexed hash map! Added methods
.get_index()
,.get_index_mut()
,.swap_remove_index()
,.get_pair_index()
,.get_pair_index_mut()
.
- Add more
-
0.1.2
- Implement the 32/32 split idea for
Pos
which improves cache utilization and lookup performance.
- Implement the 32/32 split idea for
-
0.1.1
- Initial release.