【问题标题】:How to use random_shuffle to shuffle a 2D array C++如何使用 random_shuffle 随机播放 2D 数组 C++
【发布时间】:2014-02-18 05:49:30
【问题描述】:

我有一个 2D 对象向量,我想对它们进行随机播放。这个的语法是什么?

    class node{
    public:
        string hex_type = "E";// empty to start
        int Xcoordinate;
        int Ycoordinate;
        vector<reference_wrapper<node>> neighbors;


    };
nodes = vector<vector<node> >(size, vector <node>(size));//filled elsewhere
random_shuffle(&nodes[0][0], &nodes[size-1][size-1]);

这会生成一个错误,即访问冲突读取

【问题讨论】:

  • 让我们从数组开始。它是 real 二维数组,而不是一些捏造的指针数组吗?如果是这样,你的第二次尝试就结束了。
  • 这是一个真正的二维对象数组,是的,不是指针。
  • 第二次尝试有什么问题?
  • 它实际上并没有做任何事情。我用 srand(time(NULL)) 播种
  • 就其价值而言,您可能想使用std::shuffle 而不是std::random_shufflestd::shuffle 是在 C++11 中添加的,从 C++14 开始,std::random_shuffle 似乎将被正式弃用。

标签: c++ random shuffle


【解决方案1】:

如果你有一个 2d 数组 a n x m,你可以像这样把它放在一个 1d 数组 b n x m 中:

b[i * m + j] = a[i][j];

然后就可以shuffle数组b和用户逆变换

a[i / m][i % m] = b[i];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多