std::shuffle всегда одинаковый результат

Всем привет, при запуске программы shuffle всегда тусует вектор одинаково, не понимаю, что не так

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

using namespace std;

int main() {
    vector<string> backgroundSongs = {
            "../music/Sound_04669.mp3",
            "../music/Sound_11084.mp3",
            "../music/Sound_17211.mp3"
    };

    //std::random_device rd;
    //std::default_random_engine rng(rd());

    shuffle(backgroundSongs.begin(), backgroundSongs.end(), std::mt19937(std::random_device()()));

    for (const auto& song : backgroundSongs)
        cout << song << " ";
    cout << endl;

    return 0;
}

Всегда одна последовательность ../music/Sound_17211.mp3 ../music/Sound_11084.mp3 ../music/Sound_04669.mp3


Ответы (1 шт):

Автор решения: Глеб Труфанов

Проблема оказалась в реализации g++ в текущей (по-моему, предпоследней) версии mingw https://stackoverflow.com/questions/34680805/why-is-random-library-producing-the-same-results-every-time-when-using-stdun

Решение проблемы следующее:

vector<string> backgroundSongs = {
            "../music/Sound_04669.mp3",
            "../music/Sound_11084.mp3",
            "../music/Sound_17211.mp3"
    };
default_random_engine randEngine(static_cast<uint32_t>(chrono::high_resolution_clock::now().time_since_epoch().count()));
shuffle(backgroundSongs .begin(), backgroundSongs .end(), randEngine);
→ Ссылка