https://github.com/rust-lang/hashbrown
Rust port of Google's SwissTable hash map
https://github.com/rust-lang/hashbrown
Last synced: 8 days ago
JSON representation
Rust port of Google's SwissTable hash map
- Host: GitHub
- URL: https://github.com/rust-lang/hashbrown
- Owner: rust-lang
- License: apache-2.0
- Created: 2018-10-28T21:58:58.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2025-03-07T13:55:56.000Z (about 2 months ago)
- Last Synced: 2025-03-31T14:58:39.975Z (30 days ago)
- Language: Rust
- Homepage: https://rust-lang.github.io/hashbrown
- Size: 6 MB
- Stars: 2,598
- Watchers: 35
- Forks: 295
- Open Issues: 90
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE-APACHE
Awesome Lists containing this project
- awesome-list - hashbrown - lang | 1404 | (Rust)
- my-awesome - rust-lang/hashbrown - 04 star:2.6k fork:0.3k Rust port of Google's SwissTable hash map (Rust)
- awesome-ccamel - rust-lang/hashbrown - Rust port of Google's SwissTable hash map (Rust)
README
hashbrown
=========[](https://github.com/rust-lang/hashbrown/actions)
[](https://crates.io/crates/hashbrown)
[](https://docs.rs/hashbrown)
[](https://github.com/rust-lang/hashbrown)This crate is a Rust port of Google's high-performance [SwissTable] hash
map, adapted to make it a drop-in replacement for Rust's standard `HashMap`
and `HashSet` types.The original C++ version of SwissTable can be found [here], and this
[CppCon talk] gives an overview of how the algorithm works.Since Rust 1.36, this is now the `HashMap` implementation for the Rust standard
library. However you may still want to use this crate instead since it works
in environments without `std`, such as embedded systems and kernels.[SwissTable]: https://abseil.io/blog/20180927-swisstables
[here]: https://github.com/abseil/abseil-cpp/blob/master/absl/container/internal/raw_hash_set.h
[CppCon talk]: https://www.youtube.com/watch?v=ncHmEUmJZf4## [Change log](CHANGELOG.md)
## Features
- Drop-in replacement for the standard library `HashMap` and `HashSet` types.
- Uses [foldhash](https://github.com/orlp/foldhash) as the default hasher, which is much faster than SipHash.
However, foldhash does *not provide the same level of HashDoS resistance* as SipHash, so if that is important to you, you might want to consider using a different hasher.
- Around 2x faster than the previous standard library `HashMap`.
- Lower memory usage: only 1 byte of overhead per entry instead of 8.
- Compatible with `#[no_std]` (but requires a global allocator with the `alloc` crate).
- Empty hash maps do not allocate any memory.
- SIMD lookups to scan multiple hash entries in parallel.## Usage
Add this to your `Cargo.toml`:
```toml
[dependencies]
hashbrown = "0.15"
```Then:
```rust
use hashbrown::HashMap;let mut map = HashMap::new();
map.insert(1, "one");
```
## Flags
This crate has the following Cargo features:- `nightly`: Enables nightly-only features including: `#[may_dangle]`.
- `serde`: Enables serde serialization support.
- `rayon`: Enables rayon parallel iterator support.
- `equivalent`: Allows comparisons to be customized with the `Equivalent` trait. (enabled by default)
- `raw-entry`: Enables access to the deprecated `RawEntry` API.
- `inline-more`: Adds inline hints to most functions, improving run-time performance at the cost
of compilation time. (enabled by default)
- `default-hasher`: Compiles with foldhash as default hasher. (enabled by default)
- `allocator-api2`: Enables support for allocators that support `allocator-api2`. (enabled by default)## License
Licensed under either of:
* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or https://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or https://opensource.org/licenses/MIT)at your option.
### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any
additional terms or conditions.