1 Cppreference随机数生成文档:《Pseudo-random number generation》
2 常见的类和函数
2.1 随机种子生成器:std::random_device
本质上是一个非确定随机数生成器;
return:
unsigned int
:生成非确定性的随机自然数。
Examples
初始化:
std::random_device rd;
调用:
rd()
2.2 随机序列生成器
2.2.1 默认随机数生成器:std::default_random_engine
其具体行为由编译器确定(implementation-defined);
return:
unsigned integer
:生成随机自然数。
Application
- 作为随机分布器的熵(分布混乱程度的度量值)
2.2.2 梅森缠绕器:std::mt19937
实际使用中,可以使用std::default_random_engine
替代梅森缠绕器;
3 使用给定权重随机选择
#include <iostream>
#include <random>
int main() {
std::random_device rd;
std::mt19937 gen(rd());
std::discrete_distribution<> d({10, 30, 60});
for (int i = 0; i < 5; ++i) {
int room_type = d(gen);
switch (room_type)
{
case 0:
std::cout << "营地" << std::endl;
break;
case 1:
std::cout << "普通副本" << std::endl;
break;
case 2:
std::cout << "困难副本" << std::endl;
break;
}
}
}