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.