c++ - 用固定数字池中的随机唯一整数填充 vector

标签 c++ random vector integer fill

我想用随机整数填充一个 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);
}

这是允许重复整数的代码。这工作正常!

现在我想更改代码,以便从相同的可能整数随机池(minmax)生成的随机整数仅在不是时才添加已经在 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/

相关文章:

c++ - OpenCV 2.4.3 到 2.4.9 版本变更

c++ - `operator()...`在C++代码中是什么意思?

c++ - 在 vector 上使用迭代器时,'std::bad_alloc' 甚至是错误的 vector 大小

java - 将 HashMap 键值 (String) 转换为 Vector <String>?

python - 当在另一个应用程序中嵌入 python 时,如何导入或调用子模块中的函数(即 scipy.optimize.nnls)?

c++ - 如何将 Boost 与 Eclipse 一起使用?

javascript - 随机划分数组内的一个值

algorithm - 生成唯一 ID 的类/对象

haskell - (Haskell) 按钮回调中的 gi-gtk 设置图像

c++ - 运算符重载内存泄漏