Struct gcollections::wrappers::hash_set::HashSet [] [src]

pub struct HashSet<T, S = RandomState> {
    // some fields omitted
}

Methods

impl<T, S> HashSet<T, S> where T: Eq + Hash, S: BuildHasher
[src]

fn wrap(hs: StdHashSet<T, S>) -> HashSet<T, S>

Methods from Deref<Target=StdHashSet<T, S>>

fn hasher(&self) -> &S
1.9.0

Returns a reference to the set's hasher.

fn capacity(&self) -> usize
1.0.0

Returns the number of elements the set can hold without reallocating.

Examples

use std::collections::HashSet;
let set: HashSet<i32> = HashSet::with_capacity(100);
assert!(set.capacity() >= 100);

fn reserve(&mut self, additional: usize)
1.0.0

Reserves capacity for at least additional more elements to be inserted in the HashSet. The collection may reserve more space to avoid frequent reallocations.

Panics

Panics if the new allocation size overflows usize.

Examples

use std::collections::HashSet;
let mut set: HashSet<i32> = HashSet::new();
set.reserve(10);

fn shrink_to_fit(&mut self)
1.0.0

Shrinks the capacity of the set as much as possible. It will drop down as much as possible while maintaining the internal rules and possibly leaving some space in accordance with the resize policy.

Examples

use std::collections::HashSet;

let mut set = HashSet::with_capacity(100);
set.insert(1);
set.insert(2);
assert!(set.capacity() >= 100);
set.shrink_to_fit();
assert!(set.capacity() >= 2);

fn iter(&self) -> Iter<T>
1.0.0

An iterator visiting all elements in arbitrary order. Iterator element type is &'a T.

Examples

use std::collections::HashSet;
let mut set = HashSet::new();
set.insert("a");
set.insert("b");

// Will print in an arbitrary order.
for x in set.iter() {
    println!("{}", x);
}

fn difference(&'a self, other: &'a HashSet<T, S>) -> Difference<'a, T, S>
1.0.0

Visit the values representing the difference.

Examples

use std::collections::HashSet;
let a: HashSet<_> = [1, 2, 3].iter().cloned().collect();
let b: HashSet<_> = [4, 2, 3, 4].iter().cloned().collect();

// Can be seen as `a - b`.
for x in a.difference(&b) {
    println!("{}", x); // Print 1
}

let diff: HashSet<_> = a.difference(&b).cloned().collect();
assert_eq!(diff, [1].iter().cloned().collect());

// Note that difference is not symmetric,
// and `b - a` means something else:
let diff: HashSet<_> = b.difference(&a).cloned().collect();
assert_eq!(diff, [4].iter().cloned().collect());

fn symmetric_difference(&'a self, other: &'a HashSet<T, S>) -> SymmetricDifference<'a, T, S>
1.0.0

Visit the values representing the symmetric difference.

Examples

use std::collections::HashSet;
let a: HashSet<_> = [1, 2, 3].iter().cloned().collect();
let b: HashSet<_> = [4, 2, 3, 4].iter().cloned().collect();

// Print 1, 4 in arbitrary order.
for x in a.symmetric_difference(&b) {
    println!("{}", x);
}

let diff1: HashSet<_> = a.symmetric_difference(&b).cloned().collect();
let diff2: HashSet<_> = b.symmetric_difference(&a).cloned().collect();

assert_eq!(diff1, diff2);
assert_eq!(diff1, [1, 4].iter().cloned().collect());

fn intersection(&'a self, other: &'a HashSet<T, S>) -> Intersection<'a, T, S>
1.0.0

Visit the values representing the intersection.

Examples

use std::collections::HashSet;
let a: HashSet<_> = [1, 2, 3].iter().cloned().collect();
let b: HashSet<_> = [4, 2, 3, 4].iter().cloned().collect();

// Print 2, 3 in arbitrary order.
for x in a.intersection(&b) {
    println!("{}", x);
}

let intersection: HashSet<_> = a.intersection(&b).cloned().collect();
assert_eq!(intersection, [2, 3].iter().cloned().collect());

fn union(&'a self, other: &'a HashSet<T, S>) -> Union<'a, T, S>
1.0.0

Visit the values representing the union.

Examples

use std::collections::HashSet;
let a: HashSet<_> = [1, 2, 3].iter().cloned().collect();
let b: HashSet<_> = [4, 2, 3, 4].iter().cloned().collect();

// Print 1, 2, 3, 4 in arbitrary order.
for x in a.union(&b) {
    println!("{}", x);
}

let union: HashSet<_> = a.union(&b).cloned().collect();
assert_eq!(union, [1, 2, 3, 4].iter().cloned().collect());

fn len(&self) -> usize
1.0.0

Returns the number of elements in the set.

Examples

use std::collections::HashSet;

let mut v = HashSet::new();
assert_eq!(v.len(), 0);
v.insert(1);
assert_eq!(v.len(), 1);

fn is_empty(&self) -> bool
1.0.0

Returns true if the set contains no elements.

Examples

use std::collections::HashSet;

let mut v = HashSet::new();
assert!(v.is_empty());
v.insert(1);
assert!(!v.is_empty());

fn drain(&mut self) -> Drain<T>
1.6.0

Clears the set, returning all elements in an iterator.

fn clear(&mut self)
1.0.0

Clears the set, removing all values.

Examples

use std::collections::HashSet;

let mut v = HashSet::new();
v.insert(1);
v.clear();
assert!(v.is_empty());

fn contains<Q>(&self, value: &Q) -> bool where Q: Hash + Eq + ?Sized, T: Borrow<Q>
1.0.0

Returns true if the set contains a value.

The value may be any borrowed form of the set's value type, but Hash and Eq on the borrowed form must match those for the value type.

Examples

use std::collections::HashSet;

let set: HashSet<_> = [1, 2, 3].iter().cloned().collect();
assert_eq!(set.contains(&1), true);
assert_eq!(set.contains(&4), false);

fn get<Q>(&self, value: &Q) -> Option<&T> where Q: Hash + Eq + ?Sized, T: Borrow<Q>
1.9.0

Returns a reference to the value in the set, if any, that is equal to the given value.

The value may be any borrowed form of the set's value type, but Hash and Eq on the borrowed form must match those for the value type.

fn is_disjoint(&self, other: &HashSet<T, S>) -> bool
1.0.0

Returns true if the set has no elements in common with other. This is equivalent to checking for an empty intersection.

Examples

use std::collections::HashSet;

let a: HashSet<_> = [1, 2, 3].iter().cloned().collect();
let mut b = HashSet::new();

assert_eq!(a.is_disjoint(&b), true);
b.insert(4);
assert_eq!(a.is_disjoint(&b), true);
b.insert(1);
assert_eq!(a.is_disjoint(&b), false);

fn is_subset(&self, other: &HashSet<T, S>) -> bool
1.0.0

Returns true if the set is a subset of another.

Examples

use std::collections::HashSet;

let sup: HashSet<_> = [1, 2, 3].iter().cloned().collect();
let mut set = HashSet::new();

assert_eq!(set.is_subset(&sup), true);
set.insert(2);
assert_eq!(set.is_subset(&sup), true);
set.insert(4);
assert_eq!(set.is_subset(&sup), false);

fn is_superset(&self, other: &HashSet<T, S>) -> bool
1.0.0

Returns true if the set is a superset of another.

Examples

use std::collections::HashSet;

let sub: HashSet<_> = [1, 2].iter().cloned().collect();
let mut set = HashSet::new();

assert_eq!(set.is_superset(&sub), false);

set.insert(0);
set.insert(1);
assert_eq!(set.is_superset(&sub), false);

set.insert(2);
assert_eq!(set.is_superset(&sub), true);

fn insert(&mut self, value: T) -> bool
1.0.0

Adds a value to the set.

If the set did not have this value present, true is returned.

If the set did have this value present, false is returned.

Examples

use std::collections::HashSet;

let mut set = HashSet::new();

assert_eq!(set.insert(2), true);
assert_eq!(set.insert(2), false);
assert_eq!(set.len(), 1);

fn replace(&mut self, value: T) -> Option<T>
1.9.0

Adds a value to the set, replacing the existing value, if any, that is equal to the given one. Returns the replaced value.

fn remove<Q>(&mut self, value: &Q) -> bool where Q: Hash + Eq + ?Sized, T: Borrow<Q>
1.0.0

Removes a value from the set. Returns true if the value was present in the set.

The value may be any borrowed form of the set's value type, but Hash and Eq on the borrowed form must match those for the value type.

Examples

use std::collections::HashSet;

let mut set = HashSet::new();

set.insert(2);
assert_eq!(set.remove(&2), true);
assert_eq!(set.remove(&2), false);

fn take<Q>(&mut self, value: &Q) -> Option<T> where Q: Hash + Eq + ?Sized, T: Borrow<Q>
1.9.0

Removes and returns the value in the set, if any, that is equal to the given one.

The value may be any borrowed form of the set's value type, but Hash and Eq on the borrowed form must match those for the value type.

Trait Implementations

impl<T, S> Deref for HashSet<T, S>
[src]

type Target = StdHashSet<T, S>

The resulting type after dereferencing

fn deref<'a>(&'a self) -> &'a StdHashSet<T, S>

The method called to dereference a value

impl<T, S> DerefMut for HashSet<T, S>
[src]

fn deref_mut<'a>(&'a mut self) -> &'a mut StdHashSet<T, S>

The method called to mutably dereference a value

impl<T, S> Contains<T> for HashSet<T, S> where T: Eq + Hash, S: BuildHasher
[src]

fn contains(&self, value: &T) -> bool

impl<T, S> Intersection for HashSet<T, S> where T: Eq + Hash + Clone, S: BuildHasher + Default
[src]

type Output = HashSet<T, S>

fn intersection(&self, other: &HashSet<T, S>) -> HashSet<T, S>

impl<T, S> Union for HashSet<T, S> where T: Eq + Hash + Clone, S: BuildHasher + Default
[src]

type Output = HashSet<T, S>

fn union(&self, other: &HashSet<T, S>) -> HashSet<T, S>

impl<T, S> Difference for HashSet<T, S> where T: Eq + Hash + Clone, S: BuildHasher + Default
[src]

type Output = HashSet<T, S>

fn difference(&self, other: &HashSet<T, S>) -> HashSet<T, S>

impl<T, S> SymmetricDifference for HashSet<T, S> where T: Eq + Hash + Clone, S: BuildHasher + Default
[src]

type Output = HashSet<T, S>

fn symmetric_difference(&self, other: &HashSet<T, S>) -> HashSet<T, S>