【发布时间】:2017-06-06 14:10:50
【问题描述】:
我有一个用 1 到 100 的数字初始化的 std::vector
std::vector<int> vec;
for(int i = 1; i < 101; i++)
vec.push_back(i);
我想选择两个具有最小距离的随机整数(例如最小距离可以是 10)。
如果 num1, num2 是数字:
num2 - num1 > 距离
我正在使用以下方法在范围之间选择一个随机整数:
int getRandomValue(int from, int to)
{
std::random_device seeder;
std::mt19937 engine(seeder());
std::uniform_int_distribution<int> dist(from, to);
return dist(engine);
}
如何生成 num2 和 num1?
【问题讨论】:
-
使用相同的方法,然后
[0, std::numeric_limits<int>::max]? -
1) 选择 dist
D = 52) 选择随机索引A = rand(0 to (N - D))3) 选择索引B = A + D -
您想要固定距离还是最小距离?您的问题对两者都有要求。
-
@NathanOliver 谢谢。我需要一个最小的距离。我会更新
-
OT:您可能希望您的 mt 为
static或thread_local,这样您就不必在每次通话时都重新播种。否则,如果你一直在调用它,你可以直接使用random_device。此外,可以改进播种以查看 mt 的整个状态空间,例如参见我的问题here。
标签: c++