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