
I made a post sometime last year about requiring a distribution that could generate enums with specified probabilities. I find I am regularly requiring a discrete distribution like this - where I specify the probabilities. Am I the only one who requires it, or would it be useful to a wider audience? I'm just wondering whether to submit a feature request for it or not? Thanks, Kevin Martin This is what I'm using at the moment: template<class IntType = int> class discrete_distribution { public: typedef boost::uniform_int<>::input_type input_type; typedef IntType result_type; template<size_t N> discrete_distribution(const boost::array<int, N> &outputs, const boost::array<int, N> &weights) : outputs_(outputs.begin(), outputs.end()), weights_(weights.begin(), weights.end()) { for(int i=1;i!=weights_.size();++i) weights_[i] += weights_[i-1]; } inline void reset() {} template<class Engine> result_type operator()(Engine& eng) { boost::uniform_int<> ui(0, weights_.back()-1); boost::variate_generator<Engine&, boost::uniform_int<> > vg(eng, ui); int idx = std::lower_bound(weights_.begin(), weights_.end(), vg()) - weights_.begin(); return outputs_[idx]; } private: std::vector<int> outputs_; std::vector<int> weights_; };