我想用随机整数填充一个 vector ,但其中不能有重复项。
首先,我有这段代码可以将 numberOfSlots 个介于 0 和 7 之间的随机整数放入 vector 中(numberOfSlots 可以是 2 到 20):
srand((unsigned int)time(NULL));
unsigned int min = 0;
unsigned int max = 7;
std::vector<unsigned int> v;
for (int i = 0; i < numberOfSlots; i++) {
unsigned int rdm = std::rand() % (max - min + 1) + min;
v.push_back(rdm);
}
这是允许重复整数的代码。这工作正常!
现在我想更改代码,以便从相同的可能整数随机池(min 到 max)生成的随机整数仅在不是时才添加已经在 vector 中。
因此,如果例如 numberOfSlots 为 5,则 vector 将具有 5 个从池中随机选择但不相同的条目,例如7, 1, 3, 5, 0。如果 numberOfSlots 为 8,则 vector 将为例如 3, 1, 2, 7, 6, 0, 4, 5。
我知道如何打乱 vector 和其他东西,但我无法让它工作。我想我必须使用一个 while 循环并检查 vector 中所有已经存在的整数与要添加的新随机数,如果它已经在那里生成一个新的随机数并再次检查,等等,但我不知道
我是初学者,这真的很难。有人可以给我提示吗?我将不胜感激......非常感谢
最佳答案
您可以用值 0..N-1(或您的池值)填充 vector ,然后对其进行洗牌。参见示例:
// Initialize
for(i = 0; i < N; i++)
arr[i] = i;
// shuffle
for(i = N - 1; i > 0; i--) {
j = rand() % i;
swap(arr[i], arr[j]);
}
关于c++ - 用固定数字池中的随机唯一整数填充 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19781933/