random: add container random choice

This commit is contained in:
Danny Robson 2019-05-12 11:04:36 +10:00
parent b0897a5ea7
commit 98705a61c9

View File

@ -155,4 +155,19 @@ namespace cruft::random {
std::uniform_int_distribution<size_t> dist (0, N - 1);
return t[dist (generator ())];
}
//-------------------------------------------------------------------------
template <typename ContainerT>
auto
choose (ContainerT &data)
{
if (data.empty ())
return data.end ();
return std::next (
data.begin (),
uniform (typename ContainerT::size_type {0}, data.size () - 1)
);
}
};