在C ++中的矢量随机向量

时间:2015-08-09 13:36:48

标签: c++ c++11 random c++14

考虑vector<vector<int> > Vec

我希望在Vec中的每个int中随机播放vector<int>值,并在vector< vector<int> >上执行随机播放。

如何在C ++中执行此操作?

我的主要目标是随机化一个整数矩阵,我使用vector<vector<int> > Vec实现了。

目前,我正在尝试这样做:

unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();

for(int i=0;i<Vec.size();i++) {
    shuffle(Vec[i].begin(), Vec[i].end(), std::default_random_engine(seed));
}
shuffle(Vec.begin(),Vec.end()); 
// gives an error: 
cluster.cpp:36:27: error: no matching function for call to ‘shuffle(std::vector<std::vector<int> >::iterator, std::vector<std::vector<int> >::iterator)’

1 个答案:

答案 0 :(得分:2)

您可以使用shuffle操作随机随机播放数组中的元素。所以你可以使用它两次来随机化数组。但是,它留下的问题是数字连续洗牌,行也被洗牌。由于约束仍然存在,因此这不是完全随机的改组。

为了获得真正随机的改组,我建议你将矩阵复制到一维矢量中,对该矢量进行混洗,然后将其重新整形为矩阵。

对矢量进行混洗的代码如下

#include <algorithm>
#include <random>

auto engine = std::default_random_engine{};
std::shuffle(std::begin(vector), std::end(vector), engine);