Я хочу использовать этот алгоритм для выбора случайного слова из строки:
Выберите первое слово с вероятностью 1: 1,
выберите второе слово с вероятностью 1: 2,
выберите n-е слово с возможностью 1: n
, где каждый выбор заменяет последний выбор.
Я хочу использовать std :: mt19937 для "случайности". (есть ли лучший метод?)
Моя функция должна получить строку ввода в следующем формате:
word1 word2
word3 word4 word5
word6
, где количество слов в строке не указано, а слова отделяются друг от друга пробелы или новые строки.
Это правильное использование std :: mt19937?
std::string random_word_from_string(std::string input)
{
static auto gen = std::mt19937{std::random_device{}()};
std::string random_word="";
std::string word="";
std::stringstream iss(input);
auto count = 0u;
while (iss >> word)
{
if (std::uniform_int_distribution{0u,count++}(gen) == 0)
{
random_word = word;
}
}
return random_word;
}
Если на этот вопрос уже дан ответ на С ++, извините, но я не смог Найди это! Но я очень благодарен за то, что получил ссылку на дубликат.