mardi 8 mai 2018

C++: Why is this method returning the same random number every time?

I have a class which has some data stored in a vector and a method that is supposed to select a random element and return it, but when I run it, it returns the same element every time.

Here is a simplified example based on my code:

#include <iostream>
#include <random>
#include <vector>

class MyObj{
  private:
    std::vector<int> set_data;

  public:
    MyObj(int num_elements){
      for (int i = 0; i < num_elements; ++i){
        set_data.push_back(i); // just so that there is some data in there
      }
    };
    int getRandomElement(std::mt19937 rng){
      std::uniform_int_distribution<int> uni(0,set_data.size()-1);
      int idx = uni(rng);
      return set_data[idx];
    };
};


int main()
{
  std::random_device r;
  std::seed_seq seed{r(), r(), r(), r(), r(), r(), r(), r()};
  std::mt19937 rng = std::mt19937(seed);

  MyObj temp(50);

  for (int i = 0; i < 20; i++){
    std::cout << "getting random element: " << temp.getRandomElement(rng) << std::endl;
  }
}

and the output is:

getting random element: 19
getting random element: 19
getting random element: 19
getting random element: 19
getting random element: 19
getting random element: 19
getting random element: 19
getting random element: 19
getting random element: 19
getting random element: 19
getting random element: 19
getting random element: 19
getting random element: 19
getting random element: 19
getting random element: 19
getting random element: 19
getting random element: 19
getting random element: 19
getting random element: 19
getting random element: 19

Is there anything obvious that i have done wrong here?




Aucun commentaire:

Enregistrer un commentaire