Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用std::random_设备洗牌一副牌_C++_C++11_Random - Fatal编程技术网

C++ 使用std::random_设备洗牌一副牌

C++ 使用std::random_设备洗牌一副牌,c++,c++11,random,C++,C++11,Random,我正在尝试洗牌向量的内容。对向量排序后,内容将被传输到队列中。队列代表一副牌。我遇到的问题是,即使我关闭了程序,我也会不断收到相同的结果。事实上,即使关闭IDE,我也会得到相同的序列。换言之,牌被洗牌一次,并且无论发生什么,都保持顺序。我以前尝试过使用这种随机内容的新方法,但不得不求助于旧方法。我希望最终一劳永逸地解决这个问题。如果没有办法做到这一点,我的下一个问题将是如何在仍然使用std::shuffle的情况下将内容随机化。我还尝试了autoengine=std::default\u ran

我正在尝试洗牌
向量的内容。对
向量
排序后,内容将被传输到队列中。队列代表一副牌。我遇到的问题是,即使我关闭了程序,我也会不断收到相同的结果。事实上,即使关闭IDE,我也会得到相同的序列。换言之,牌被洗牌一次,并且无论发生什么,都保持顺序。我以前尝试过使用这种随机内容的新方法,但不得不求助于旧方法。我希望最终一劳永逸地解决这个问题。如果没有办法做到这一点,我的下一个问题将是如何在仍然使用
std::shuffle
的情况下将内容随机化。我还尝试了
autoengine=std::default\u random\u engine{}仅用于获得相同的结果。谢谢

    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";
std::vector v;
常量迭代器iter;
for(iter=cards.begin();iter!=cards.end();iter++){
v、 推回(iter->第一);
}
std::随机_装置rd;
标准:MT19937G(rd());
//auto engine=std::默认\u随机\u引擎{};
std::shuffle(v.begin(),v.end(),g);
std::copy(v.begin()、v.end()、std::ostream_迭代器(std::cout,“”);

std::cout您使用的是相同的简单种子。阅读如何正确地为PRNG播种:

我决定采用以下解决方案,因为它满足了我的一般要求

vector<string> vect;

    map<string, int>::const_iterator imap;
    for (imap = cards.begin(); imap != cards.end(); imap++) {
       vect.push_back(imap->first);
    }

    srand(std::time(0));
    random_shuffle(vect.begin(), vect.end());

    vector<string>::const_iterator ivect = vect.begin();
    while (ivect != vect.end()) {
        deck.push(*ivect);
        ivect++;
    }

    std::copy(vect.begin(), vect.end(), std::ostream_iterator<string>(std::cout, " "));
    std::cout << "\n";
vect;
常量迭代器imap;
对于(imap=cards.begin();imap!=cards.end();imap++){
向量推回(imap->first);
}
srand(std::time(0));
随机洗牌(vect.begin(),vect.end());
向量::常量迭代器ivect=vect.begin();
while(ivect!=vect.end()){
甲板推进(*ivect);
ivect++;
}
std::copy(vect.begin()、vect.end()、std::ostream_迭代器(std::cout,“”);

由于缺乏研究努力,库特被否决了。人们几乎看不到有关smth的任何文档。像
mt19937
,不知道这里出了什么问题,搜索“Seed mt19937 C++”也能在每个搜索引擎中得到不错的结果。我在mt19937中植入了不同的整数,以查看是否有任何变化。我不小心把代码贴在这里了。我已经通过在mt19937中植入rd修复了代码,rd是预期的实现。随机_设备是一个随机种子,不是吗?它甚至不会编译。不,
std::random_device
不是种子,尽管它可以用来获得种子。请去读一些。我很抱歉在rd之后省略了开始和结束的括号。它现在应该可以编译了。我还必须承认,我已经看过了这个链接,但仍然有点困惑,所以我想我应该在这里问一下,因为人们通常都非常乐于助人。通常,你的系统是什么?MinGW的
随机_装置
已知已损坏。