bimap-rs
is a two-way bijective map implementation for Rust.
To use bimap-rs
in your Rust project, add the following to your Cargo.toml
:
bimap = "0.3"
bimap-rs
optionally supports serialization and deserialization of BiHashMap
and BiBTreeMap
through serde. To avoid unnecessary dependencies, this is gated behind the
serde
feature and must be manually enabled. To do so, add the following to your Cargo.toml
:
bimap = { version = "0.3", features = [ "serde" ]}
To use bimap-rs
without the Rust standard library, add the following to your Cargo.toml
:
bimap = { version = "0.3", default-features = false }
If you do use bimap
without the standard library, there is no BiHashMap
, only BiBTreeMap
.
Currently, the no_std
version of this library may not be used with serde
integration.
use bimap::BiMap;
let mut elements = BiMap::new();
// insert chemicals and their corresponding symbols
elements.insert("hydrogen", "H");
elements.insert("carbon", "C");
elements.insert("bromine", "Br");
elements.insert("neodymium", "Nd");
// retrieve chemical symbol by name (left to right)
assert_eq!(elements.get_by_left(&"bromine"), Some(&"Br"));
assert_eq!(elements.get_by_left(&"oxygen"), None);
// retrieve name by chemical symbol (right to left)
assert_eq!(elements.get_by_right(&"C"), Some(&"carbon"));
assert_eq!(elements.get_by_right(&"Al"), None);
// check membership
assert!(elements.contains_left(&"hydrogen"));
assert!(!elements.contains_right(&"He"));
// remove elements
assert_eq!(
elements.remove_by_left(&"neodymium"),
Some(("neodymium", "Nd"))
);
assert_eq!(elements.remove_by_right(&"Nd"), None);
// iterate over elements
for (left, right) in &elements {
println!("the chemical symbol for {} is {}", left, right);
}
See the docs for more details.
bimap-rs
is licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
at your option.
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.