← Patterns

# Choose a random element

`12345678910111213` | ```
#include <random>
#include <vector>
int main()
{
std::vector<int> v = {10, 15, 20, 25, 30};
std::random_device random_device;
std::mt19937 engine{random_device()};
std::uniform_int_distribution<int> dist(0, v.size() - 1);
int random_element = v[dist(engine)];
}
``` |

This pattern is licensed under the CC0 Public Domain Dedication.

Requires
c++11
or newer.

## Intent

Choose a random element from a container.

## Description

On line 6, we create a `std::vector`

from
which we want to select a random element.

We then effectively roll a die
where the numbers on the die are the indices of elements in the
container. That is, we seed the
`std::mt19937`

on
lines 8–9 and create a uniform random distribution of integers from
`0`

to `v.size() - 1`

inclusive on line 10. This distribution will
give us any integer in this range with equal probability.

On line 12, we call `dist(engine)`

to generate the random index, and
use this value to access an element from `v`

.