在c ++中随机生成n个唯一数字

时间:2013-12-01 06:03:07

标签: c++

我尝试在循环中调用rand()函数迭代n次,但生成的数字不是唯一的。所以请建议任何函数或逻辑来生成从0到n的n个随机数。

2 个答案:

答案 0 :(得分:3)

如果你需要产生值[0,n]的随机shuffle(即0,1,2,... n-1),那么下面的代码(改编自cppreference.com)将执行特技:

#include <numeric>
#include <algorithm>
#include <vector>

vector<int> shuffled_vector( int n )
{
    std::vector<int> v(n);
    std::iota(v.begin(), v.end(), 0);

    std::random_shuffle(v.begin(), v.end());

    return v;
}

关于cppreference的原始示例涉及更多。在此处找到它:http://en.cppreference.com/w/cpp/algorithm/iota

如果您有特殊需要,可以向std::random_shuffle提供随机数生成器。这是v.end()之后的第三个论点。更多详情:http://en.cppreference.com/w/cpp/algorithm/random_shuffle

答案 1 :(得分:0)

这在很大程度上取决于您需要获得的唯一数字组合的概率分布。

最直接(但很慢)的方法是生成随机数,跳过克隆,直到你热n个数字。在这种情况下,您将获得唯一n个数字组合的统一概率分布。

相关问题