diff --git a/random.hpp b/random.hpp index 5bf64793..9c099b22 100644 --- a/random.hpp +++ b/random.hpp @@ -20,12 +20,33 @@ #ifndef __UTIL_RANDOM_HPP #define __UTIL_RANDOM_HPP +#include + namespace util { template T& randomise (T &); template T random (void); + + template + typename T::value_type& + choose (T &container) { + typename T::iterator cursor = container.begin (); + typename T::size_type size = container.size (); + typename T::size_type offset = random () % size; + + std::advance (cursor, offset); + return *cursor; + } + + template + typename T::value_type& + choose (T begin, T end) { + typename T::difference_type size = std::distance (begin, end); + std::advance (begin, random () % size); + return *begin; + } } #endif