00001 #ifndef RANDOM_WEIGHT_H
00002 #define RANDOM_WEIGHT_H
00003
00004
00005
00006
00007
00008
00009
00010 template <typename T>
00011 T* random_choose_weighted(std::vector<std::pair<T, int> >& choices)
00012 {
00013 int total = 0;
00014 for (unsigned int i = 0; i < choices.size(); i++)
00015 total += choices[i].second;
00016 int r = random2(total);
00017 int sum = 0;
00018 for (unsigned int i = 0; i < choices.size(); i++)
00019 {
00020 sum += choices[i].second;
00021 if (sum > r)
00022 return (&choices[i].first);
00023 }
00024 return (NULL);
00025 }
00026
00027 #endif