Spec-Zone.ru › C++

std::discrete_distribution

Определено в заголовке <random>
template< class IntType = int >
class discrete_distribution;
(с C++11)

std::discrete_distribution генерирует случайные целые числа на интервале [​0​, n), где вероятность каждого отдельного целого числа i определяется как wi/S, то есть вес i-го целого числа, делённый на сумму всех n весов.

std::discrete_distribution удовлетворяет всем требованиям распределения случайных чисел.

Параметры шаблона

IntType - Тип результата, генерируемый генератором. Результат не определён, если это не один из short, int, long, long long, unsigned short, unsigned int, unsigned long, или unsigned long long.

Типы членов

Тип члена Определение
result_type (C++11) IntType
param_type (C++11) тип набора параметров, см. распределение случайных чисел.

Члены-функции

(конструктор)
(C++11)
создаёт новое распределение
(публичная функция-член)
reset
(C++11)
сбрасывает внутреннее состояние распределения
(публичная функция-член)
Генерация
operator()
(C++11)
генерирует следующее случайное число в распределении
(публичная функция-член)
Характеристики
probabilities
получает список вероятностей
(публичная функция-член)
param
(C++11)
получает или устанавливает объект параметра распределения
(публичная функция-член)
min
(C++11)
возвращает минимальное потенциально сгенерированное значение
(публичная функция-член)
max
(C++11)
возвращает максимальное потенциально сгенерированное значение
(публичная функция-член)

Функции вне класса

operator==operator!=
(C++11)(C++11)(удалено в C++20)
сравнивает два объекта распределения
(функция)
operator<<operator>>
(C++11)
выполняет ввод-вывод потоков для псевдослучайного распределения чисел
(шаблон функции)

Пример

#include <iomanip>
#include <iostream>
#include <map>
#include <random>
 
int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    std::discrete_distribution<> d({40, 10, 10, 40});
    std::map<int, int> map;
 
    for (int n = 0; n < 1e4; ++n)
        ++map[d(gen)];
 
    for (const auto& [num, count] : map)
        std::cout << num << " generated " << std::setw(4) << count << " times\n";
}

Возможный вывод:

0 generated 4037 times
1 generated  962 times
2 generated 1030 times
3 generated 3971 times

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/random/discrete_distribution

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API