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);