Struct std::rand::distributions::WeightedChoiceUnstable [-] [+] [src]

pub struct WeightedChoice<'a, T> where T: 'a {
    // some fields omitted
}

A distribution that selects from a finite collection of weighted items.

Each item has an associated weight that influences how likely it is to be chosen: higher weight is more likely.

The Clone restriction is a limitation of the Sample and IndependentSample traits. Note that &T is (cheaply) Clone for all T, as is uint, so one can store references or indices into another vector.

Example

fn main() { use std::rand; use std::rand::distributions::{Weighted, WeightedChoice, IndependentSample}; let mut items = vec!(Weighted { weight: 2, item: 'a' }, Weighted { weight: 4, item: 'b' }, Weighted { weight: 1, item: 'c' }); let wc = WeightedChoice::new(items.as_mut_slice()); let mut rng = rand::thread_rng(); for _ in 0..16 { // on average prints 'a' 4 times, 'b' 8 and 'c' twice. println!("{}", wc.ind_sample(&mut rng)); } }
use std::rand;
use std::rand::distributions::{Weighted, WeightedChoice, IndependentSample};

let mut items = vec!(Weighted { weight: 2, item: 'a' },
                     Weighted { weight: 4, item: 'b' },
                     Weighted { weight: 1, item: 'c' });
let wc = WeightedChoice::new(items.as_mut_slice());
let mut rng = rand::thread_rng();
for _ in 0..16 {
     // on average prints 'a' 4 times, 'b' 8 and 'c' twice.
     println!("{}", wc.ind_sample(&mut rng));
}

Methods

impl<'a, T> WeightedChoice<'a, T> where T: Clone

fn new(items: &'a mut [Weighted<T>]) -> WeightedChoice<'a, T>

Create a new WeightedChoice.

Panics if: - v is empty - the total weight is 0 - the total weight is larger than a uint can contain.

Trait Implementations

impl<'a, T> Sample<T> for WeightedChoice<'a, T> where T: Clone

fn sample<R>(&mut self, rng: &mut R) -> T where R: Rng

impl<'a, T> IndependentSample<T> for WeightedChoice<'a, T> where T: Clone

fn ind_sample<R>(&self, rng: &mut R) -> T where R: Rng