C++ random numbers aren't truly random - they are generated from initial value called seed. If you don't set the seed, it will always be the same, so generated sequence won't change. std::random_shuffle
depends on random number generation, so it will behave this way as well.
So how to set the seed? Use:
srand(time(0));
before any calls to functions using random numbers. It will set the seed to current time in seconds. Don't forget to add appropritate header files.