Struct bitflags::__core::collections::HashSet
[−]
[src]
pub struct HashSet<T, S = RandomState> { // some fields omitted }1.0.0
An implementation of a hash set using the underlying representation of a HashMap where the value is ().
As with the HashMap
type, a HashSet
requires that the elements
implement the Eq
and Hash
traits. This can frequently be achieved by
using #[derive(PartialEq, Eq, Hash)]
. If you implement these yourself,
it is important that the following property holds:
k1 == k2 -> hash(k1) == hash(k2)
In other words, if two keys are equal, their hashes must be equal.
It is a logic error for an item to be modified in such a way that the
item's hash, as determined by the Hash
trait, or its equality, as
determined by the Eq
trait, changes while it is in the set. This is
normally only possible through Cell
, RefCell
, global state, I/O, or
unsafe code.
Examples
use std::collections::HashSet; // Type inference lets us omit an explicit type signature (which // would be `HashSet<&str>` in this example). let mut books = HashSet::new(); // Add some books. books.insert("A Dance With Dragons"); books.insert("To Kill a Mockingbird"); books.insert("The Odyssey"); books.insert("The Great Gatsby"); // Check for a specific one. if !books.contains("The Winds of Winter") { println!("We have {} books, but The Winds of Winter ain't one.", books.len()); } // Remove a book. books.remove("The Odyssey"); // Iterate over everything. for book in &books { println!("{}", book); }
The easiest way to use HashSet
with a custom type is to derive
Eq
and Hash
. We must also derive PartialEq
, this will in the
future be implied by Eq
.
use std::collections::HashSet; #[derive(Hash, Eq, PartialEq, Debug)] struct Viking<'a> { name: &'a str, power: usize, } let mut vikings = HashSet::new(); vikings.insert(Viking { name: "Einar", power: 9 }); vikings.insert(Viking { name: "Einar", power: 9 }); vikings.insert(Viking { name: "Olaf", power: 4 }); vikings.insert(Viking { name: "Harald", power: 8 }); // Use derived implementation to print the vikings. for x in &vikings { println!("{:?}", x); }