Я пытаюсь перетасовать содержимое vector
. После сортировки vector
содержимое будет перенесено в очередь. Очередь представляет колоду карт. Проблема, с которой я сталкиваюсь, заключается в том, что я постоянно получаю те же результаты, даже если я закрываю программу. Фактически, я получаю такую же последовательность даже после закрытия IDE. Другими словами, карты перетасовываются один раз и остаются в этом порядке, несмотря ни на что. Я пробовал использовать этот новый метод рандомизации содержимого раньше и должен был прибегнуть к старому методу. Я надеюсь окончательно решить эту проблему раз и навсегда. Если этого не сделать, мой следующий вопрос заключается в том, как рандомизировать содержимое, используя std::shuffle
. Я также попробовал auto engine = std::default_random_engine{};
только для получения тех же результатов. Благодарю.Shuffle колода карт с использованием std :: random_device
std::vector<string> v;
map<string, int>::const_iterator iter;
for (iter = cards.begin(); iter != cards.end(); iter++) {
v.push_back(iter->first);
}
std::random_device rd;
std::mt19937 g(rd());
//auto engine = std::default_random_engine{};
std::shuffle(v.begin(), v.end(), g);
std::copy(v.begin(), v.end(), std::ostream_iterator<string>(std::cout, " "));
std::cout << "\n";
Сокращенный из-за отсутствия исследовательских усилий. Невозможно прочитать какую-либо документацию о чем-л. например, 'mt19937', не узнав, что здесь не так, и поиск *« Seed mt19937 C++ »* дает достойные результаты для каждой поисковой системы. –
Я посеял mt19937 с разными целыми числами, чтобы увидеть, что-нибудь изменится. Я случайно разместил этот код здесь. Я исправил код путем посева mt19937 с rd, который является предполагаемой реализацией. std :: random_device - случайное семя, не так ли? –
Это даже не компилируется. И нет, 'std :: random_device' не является семенем, хотя его можно использовать для его получения. Пожалуйста, прочитайте несколько [docs] (http://en.cppreference.com/w/cpp/numeric/random/mersenne_twister_engine). –