From f07dda91169ec629e45a549aafe1affd21647082 Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Wed, 4 Jan 2012 17:03:27 +1100 Subject: [PATCH] Add a random choice from container function --- random.hpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) 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