c++ - 如何使用 std::rand 生成非重复的随机数序列

标签 c++ c++11 random

阅读 std::uniform_int_distribution在最后一个例子中,生成的序列是:

1 1 6 5 2 2 5 5 6 2

如何保证所有生成的数字在它们之间是不同的?如果这是可能的,如果我们生成的数字多于护林员大小,预期的行为是什么?

我需要这个,因为我必须在具有数十万(甚至数百万)行的 cv::Mat 中随机选择少量行(比如 10 行)。

最佳答案

当然。对于 true 生成器,获得数字的可能性不依赖于任何先前的数字。伪随机数生成器试图非常好地模拟此属性。

如果您想生成没有重复的数字,那么最好的办法是围绕 std::shuffle 制定解决方案:即定义您想要的数字,然后将它们打乱。

关于c++ - 如何使用 std::rand 生成非重复的随机数序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41770067/

相关文章:

c++ - 类型 ‘serial::serial’ 命名构造函数,而不是 C/C++ 中的类型

c++ - libconfig++ -stdlib=libc++ undefined symbol

unit-testing - 测试随机值 - 关于这种方法的想法?

c++ - 在文本文件中搜索某个单词 C++

c++ - 做关于兔子群的练习,撞墙了

c++ - 将字符串作为正则表达式模式输入传递。 (非标量误差)

c++ - 为什么这个随机数生成器产生的序列总是一样的?

c++ - 如何将字符串中的所有数字保存到 C++ 中的多维数组中?

C++ Makefile g++ 和 "std="标志似乎不起作用

shuffle - 混洗有偏差的随机数