无法std :: shuffle?

时间:2018-11-05 16:25:36

标签: c++ random stdvector

Code是基本的:

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

int main(int argc, const char *argv[]) {
    std::vector<int> mSet = { 1, 2, 3, 4 };

    auto timeSeed = std::chrono::high_resolution_clock::now().time_since_epoch().count();
    std::seed_seq ss{ uint32_t(timeSeed & 0xffffffff), uint32_t(timeSeed >> 32) };
    std::mt19937_64 rng;
    std::shuffle(mSet.begin(), mSet.end(), rng);

    for (size_t i = 0; i < mSet.size(); i++) {
        std::cout << mSet[i] << " ";
    }
}

它总是向我显示相同的顺序。我在哪里错了?

1 个答案:

答案 0 :(得分:7)

实例化rng时,没有使用ss。因此,不会使用您的种子,并且序列将始终相同。

看起来像您的意思:

std::mt19937_64 rng{ss};

您的编译器应警告您ss未使用。您是否由于某种原因关闭了警告?不幸的是,即使使用-Wextra,GCC似乎也没有对此发出警告。