【发布时间】:2014-11-10 20:38:42
【问题描述】:
我需要一种在 x,y 之间生成随机整数的方法,但是一旦生成了随机 z,我需要 x,y 的下一次迭代来排除 z(或者更好的是,要排除的整数列表)。返回值必须遵守“std::uniform_int_distribution”条件。有一种明显的方法可以做到这一点,但我希望有一个快速的版本。
int GenerateRandomBetweenExcluding(int min, int max, int exclude) // even better is a list<int> to exclude
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(min, max); // how to exclude "exclude" or list<int>?
int randNum = dis(gen);
return randNum;
}
【问题讨论】:
-
在
min和max-1之间随机化如果结果>=exclude,加一个 -
这会改变分布的均匀性,因为返回值可能会超出排除范围。
-
如果你不想重复,maby
std::random_shuffle很有帮助 -
如果您开始防止重复,我很难理解它如何仍然是均匀分布。
-
完全旁注:
std::list可能是使用错误的容器。
标签: c++ c++11 boost random std