提升库 - 不生成不同的随机数

时间:2014-09-07 14:22:56

标签: c++ boost random

我正在使用下面这段代码并在循环中调用它,以便我可以为我的完美哈希函数获取多个随机数。但它给了我相同的数字,而不是截然不同。 “min”接收0或1,max接收“p-1”。其中p是素数大于散列表大小。

long long int generateSingleRandomNo2(long long int min, long long int max) 
{  
typedef boost::uniform_int<long long int> NumberDistribution; 
typedef boost::mt19937 RandomNumberGenerator; 
typedef boost::variate_generator<RandomNumberGenerator&,NumberDistribution> Generator; 

NumberDistribution distribution(min,max); 
RandomNumberGenerator generator; 
Generator numberGenerator(generator, distribution); 
generator.seed(time(0)); // seed with the current time 
long long int A=numberGenerator();
return A;
/*if(A>min)
  return A ;
else 
generateSingleRandomNo1(min,max);*/

}

1 个答案:

答案 0 :(得分:1)

要获得不同的随机数,您只需拨打seed(...)一次。一种可能的解决方案是使用静态RandomNumberGenerator实例:

long long int generateSingleRandomNo2(long long int min, long long int max) 
{  
  struct RandomNumberGenerator : public boost::mt19937 {
    RandomNumberGenerator() {
      seed(time(NULL)); // seed with the current time
    }        
  };
  typedef boost::uniform_int<long long int> NumberDistribution; 
  typedef boost::variate_generator<RandomNumberGenerator&,NumberDistribution> Generator; 

  // static generator instance
  static RandomNumberGenerator generator;

  // generate random number
  NumberDistribution distribution(min, max); 
  Generator numberGenerator(generator, distribution); 
  long long int A = numberGenerator();
  return A;
  /*if(A>min)
    return A ;
    else 
    generateSingleRandomNo1(min,max);
  */
}