indexmap
========

|build_status|_ |crates|_ |docs|_ |rustc|_

.. |crates| image:: https://img.shields.io/crates/v/indexmap.svg
.. _crates: https://crates.io/crates/indexmap

.. |build_status| image:: https://travis-ci.org/bluss/indexmap.svg
.. _build_status: https://travis-ci.org/bluss/indexmap

.. |docs| image:: https://docs.rs/indexmap/badge.svg
.. _docs: https://docs.rs/indexmap

.. |rustc| image:: https://img.shields.io/badge/rust-1.18%2B-orange.svg
.. _rustc: https://img.shields.io/badge/rust-1.18%2B-orange.svg

A safe, pure-Rust hash table which preserves insertion order.

This crate implements compact map and set data-structures,
where the iteration order of the keys is independent from their hash or
value. It preserves insertion order (except after removals), and it
allows lookup of entries by either hash table key or numerical index.

Note: this crate was originally released under the name ``ordermap``,
but it was renamed to ``indexmap`` to better reflect its features.

Background
==========

This was inspired by Python 3.6's new dict implementation (which remembers
the insertion order and is fast to iterate, and is compact in memory).

Some of those features were translated to Rust, and some were not. The result
was indexmap, a hash table that has following properties:

- Order is **independent of hash function** and hash values of keys.
- Fast to iterate.
- Indexed in compact space.
- Preserves insertion order **as long** as you don't call ``.remove()``.
- Uses robin hood hashing just like Rust's libstd ``HashMap``.

  - It's the usual backwards shift deletion, but only on the index vector, so
    it's cheaper because it's moving less memory around.

Does not implement (Yet)
------------------------

- ``.reserve()`` exists but does not have a complete implementation

Performance
-----------

``IndexMap`` derives a couple of performance facts directly from how it is constructed,
which is roughly:

  Two vectors, the first, sparse, with hashes and key-value indices, and the
  second, dense, the key-value pairs.

- Iteration is very fast since it is on the dense key-values.
- Removal is fast since it moves memory areas only in the first vector,
  and uses a single swap in the second vector.
- Lookup is fast-ish because the hashes and indices are densely stored.
  Lookup also is slow-ish since hashes and key-value pairs are stored in
  separate places. (Visible when cpu caches size is limiting.)

- In practice, ``IndexMap`` has been tested out as the hashmap in rustc in PR45282_ and
  the performance was roughly on par across the whole workload. 
- If you want the properties of ``IndexMap``, or its strongest performance points
  fits your workload, it might be the best hash table implementation.

.. _PR45282: https://github.com/rust-lang/rust/pull/45282

Interesting Features
--------------------

- Insertion order is preserved (``.swap_remove()`` perturbs the order, like the method name says).
- Implements ``.pop() -> Option<(K, V)>`` in O(1) time.
- ``IndexMap::new()`` is empty and uses no allocation until you insert something.
- Lookup key-value pairs by index and vice versa.
- No ``unsafe``.
- Supports ``IndexMut``.


Where to go from here?
----------------------

- Ideas and PRs for how to implement insertion-order preserving remove (for example tombstones)
  are welcome. The plan is to split the crate into two hash table implementations
  a) the current compact index space version and b) the full insertion order version.


Ideas that we already did
-------------------------

- It can be an *indexable* ordered map in the current fashion
  (This was implemented in 0.2.0, for potential use as a graph datastructure).

- Idea for more cache efficient lookup (This was implemented in 0.1.2).

  Current ``indices: Vec<Pos>``. ``Pos`` is interpreted as ``(u32, u32)`` more
  or less when ``.raw_capacity()`` fits in 32 bits. ``Pos`` then stores both the lower
  half of the hash and the entry index.
  This means that the hash values in ``Bucket`` don't need to be accessed
  while scanning for an entry.


Recent Changes
==============

- 1.0.2

  - The new methods ``IndexMap::insert_full`` and ``IndexSet::insert_full`` are
    both like ``insert`` 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 of ``std`` maps in Rust 1.26.

  - The new method ``Entry::or_default`` inserts a default value in unoccupied
    entries, matching the new methods of ``std`` 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 standard
    ``HashMap``.  Thanks to @dtolnay for finding this bug.
  - The deprecated old names from ordermap were removed: ``OrderMap``,
    ``OrderSet``, ``ordermap!{}``, ``orderset!{}``. Use the new ``IndexMap``
    etc names instead.

- 0.4.1

  - Renamed crate to ``indexmap``; the ``ordermap`` crate is now deprecated
    and the types ``OrderMap/Set`` now have a deprecation notice.

- 0.4.0

  - This is the last release series for this ``ordermap`` under that name,
    because the crate is **going to be renamed** to ``indexmap`` (with types
    ``IndexMap``, ``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 under ``ordermap::map::``

  - Internally refactored ``OrderMap<K, V, S>`` so that all the main algorithms
    (insertion, lookup, removal etc) that don't use the ``S`` parameter (the
    hasher) are compiled without depending on ``S``, which reduces generics bloat.

  - ``Entry<K, V>`` no longer has a type parameter ``S``, which is just like
    the standard ``HashMap``'s entry.

  - Minimum Rust version requirement increased to Rust 1.18

- 0.3.5

  - Documentation improvements

- 0.3.4

  - The ``.retain()`` methods for ``OrderMap`` and ``OrderSet`` now
    traverse the elements in order, and the retained elements **keep their order**
  - Added new methods ``.sort_by()``, ``.sort_keys()`` to ``OrderMap`` and
    ``.sort_by()``, ``.sort()`` to ``OrderSet``. These methods allow you to
    sort the maps in place efficiently.

- 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.

- 0.3.1

  - In all ordermap iterators, forward the ``collect`` method to the underlying
    iterator as well.
  - Add crates.io categories.

- 0.3.0

  - The methods ``get_pair``, ``get_pair_index`` were both replaced by
    ``get_full`` (and the same for the mutable case).
  - Method ``swap_remove_pair`` replaced by ``swap_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 the
    ``Borrow`` trait mechanism for ``OrderMap::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.

__ https://github.com/bluss/ordermap/pull/10

- 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()``.

- 0.2.11

  - Support ``ExactSizeIterator`` for the iterators. By @Binero.
  - Use ``Box<[Pos]>`` internally, saving a word in the ``OrderMap`` struct.
  - Serde support, with crate feature ``"serde-1"``. By @xfix.

- 0.2.10

  - Add iterator ``.drain(..)`` by @stevej.

- 0.2.9

  - Add method ``.is_empty()`` by @overvenus.
  - Implement ``PartialEq, Eq`` by @overvenus.
  - Add method ``.sorted_by()``.

- 0.2.8

  - Add iterators ``.values()`` and ``.values_mut()``.
  - Fix compatibility with 32-bit platforms.

- 0.2.7

  - Add ``.retain()``.

- 0.2.6

  - Add ``OccupiedEntry::remove_entry`` and other minor entry methods,
    so that it now has all the features of ``HashMap``'s entries.

- 0.2.5

  - Improved ``.pop()`` slightly.

- 0.2.4

  - Improved performance of ``.insert()`` (`#3`__) by @pczarn.

__ https://github.com/bluss/ordermap/pull/3

- 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 libstd ``HashMap``
    does not parameterize its entries by the hasher (``S`` typarm).
  - Special case some iterator methods like ``.nth()``.

- 0.2.2

  - Disable the verbose ``Debug`` impl by default.

- 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
    return ``Option``.
  - Experimental support as an *indexed* hash map! Added methods
    ``.get_index()``, ``.get_index_mut()``, ``.swap_remove_index()``,
    ``.get_pair_index()``, ``.get_pair_index_mut()``.

- 0.1.2

  - Implement the 32/32 split idea for ``Pos`` which improves cache utilization
    and lookup performance.

- 0.1.1

  - Initial release.
