18 template <
typename T,
typename GenerateFn>
21 T element = generate_random_element_function(rng);
24 size_t index = dist(rng);
27 vec.push_back(element);
36 if (vec.size() >= 1) {
38 size_t index = dist(rng);
50 size_t index1 = dist(rng);
51 size_t index2 = dist(rng);
52 std::swap(vec[index1], vec[index2]);
59 template <
typename T,
typename MutateFn>
64 size_t index = dist(rng);
65 mutate_element_function(vec[
index], rng);
70template <
typename T,
typename MutateFn,
typename GenerateFn>
73 MutateFn&& mutate_element_function,
74 GenerateFn&& generate_random_element_function,
T select(std::mt19937_64 &rng) const
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Delete a random element at a random index.
static void mutate(std::mt19937_64 &rng, std::vector< T > &vec)
Mutate a random element at a random index.
static void mutate(std::mt19937_64 &rng, std::vector< T > &vec, MutateFn &&mutate_element_function)
Insert a random element at a random index.
static void mutate(std::mt19937_64 &rng, std::vector< T > &vec, GenerateFn &&generate_random_element_function)
Swap two random elements at random indices.
static void mutate(std::mt19937_64 &rng, std::vector< T > &vec)
void mutate_vec(std::vector< T > &vec, std::mt19937_64 &rng, MutateFn &&mutate_element_function, GenerateFn &&generate_random_element_function, const VecMutationConfig &config)