松开或松开c++;洗牌函数 有人能告诉我们如何用C++的洗牌功能来撤销或取消洗牌的数组吗?它可以通过以下链接建立:
我想做的是撤消我的洗牌数组。 我用C++ Syle函数来拖曳数组,我寻找一个函数来解这个数组。 示例:松开或松开c++;洗牌函数 有人能告诉我们如何用C++的洗牌功能来撤销或取消洗牌的数组吗?它可以通过以下链接建立:,c++,arrays,C++,Arrays,我想做的是撤消我的洗牌数组。 我用C++ Syle函数来拖曳数组,我寻找一个函数来解这个数组。 示例:数组arr{0,1,2,3,4} shuffle(arr.begin(), arr.end(), seed); 可能的输出:4,0,2,1,3 然后我需要unsuffle函数来撤销arr元素的位置,就像开始时一样 例: unshuffle(arr.begin(), arr.end(), seed); 输出:0,1,2,3,4 谢谢这个设计怎么样(使用一个虚构的类Array,可能是std::A
数组arr{0,1,2,3,4}代码>
shuffle(arr.begin(), arr.end(), seed);
可能的输出:4,0,2,1,3
然后我需要unsuffle函数来撤销arr元素的位置,就像开始时一样
例:
unshuffle(arr.begin(), arr.end(), seed);
输出:0,1,2,3,4
谢谢这个设计怎么样(使用一个虚构的类Array
,可能是std::Array
):
您有一个类ReversableShuffleArray
。这个类有两个成员,Array data
和Array shuffle\u order
,以及方法void shuffle
和Datatype&operator[]
它通过某种方式(特别是移动构造函数)向其提供数据来初始化,并将数据放入成员data
。此时,它创建了shuffle\u order
的内容,其中包含{0,1,2,3..}
,大小与数据相同
调用shuffle
时,不是data
而是shuffle\u顺序
被洗牌
运算符[](大小索引)
由返回数据[shuffle\u order[index]]定义代码>。就这么简单<代码>数据
本身永远不会被洗牌
(如何进行非无序访问应该是显而易见的,所以我不会执行它。)
当然,这也可以按程序进行,不需要上课
或者,您可以再次洗牌一个计数,如shuffle\u order
,使用它将其应用于所讨论的数组,然后从中创建另一个数组reverse\u shuffle\u order
,您可以使用反向过程
(如果你对洗牌没有控制,这对你没有帮助,但是在这个问题上,你写了“我用C++ +函数来洗牌”,所以我假设你这样做了。
这个设计如何(使用虚构的类<代码>数组<代码> >可能是<代码>:ST::数组< /代码>):
您有一个类ReversableShuffleArray
。这个类有两个成员,Array data
和Array shuffle\u order
,以及方法void shuffle
和Datatype&operator[]
它通过某种方式(特别是移动构造函数)向其提供数据来初始化,并将数据放入成员data
。此时,它创建了shuffle\u order
的内容,其中包含{0,1,2,3..}
,大小与数据相同
调用shuffle
时,不是data
而是shuffle\u顺序
被洗牌
运算符[](大小索引)
由返回数据[shuffle\u order[index]]定义代码>。就这么简单<代码>数据
本身永远不会被洗牌
(如何进行非无序访问应该是显而易见的,所以我不会执行它。)
当然,这也可以按程序进行,不需要上课
或者,您可以再次洗牌一个计数,如shuffle\u order
,使用它将其应用于所讨论的数组,然后从中创建另一个数组reverse\u shuffle\u order
,您可以使用反向过程
(如果你对洗牌没有控制,这对你没有帮助,但是在这个问题上,你写了“我用C++ + SULE函数来洗牌”,所以我假设你这样做了。这不是你可以反转的东西……如果你需要洗牌和洗牌,你可能会拷贝数组NAD KEPPONY拷贝不变。如果无法创建副本并且数组最初已排序(例如在您的示例中),则可以通过排序来“取消填充”它:std::sort(arr.begin(),arr.end())
。如果您设计了自定义随机数生成器,则可以反转。然后你可以用一种反向随机性再次洗牌。我只是假设;我不知道thar是否会起作用。这不是你可以逆转的东西……如果你同时需要无序和非无序,你可能应该复制数组并保持原样。或者,如果你不能复制并且数组最初被排序(比如在你的例子中),那么你可以通过排序来“取消无序”:std::sort(arr.begin()),arr.end())
。如果您设计了一个自定义的随机数生成器,则可能可以反转。然后你可以用一种反向随机性再次洗牌。我只是假设;我不知道他是否行得通。谢谢你,你救了我的命life@Enock很高兴我能帮上忙。那么接受答案就好了;)(点击评级下方的复选标记)谢谢,您保存了我的life@Enock很高兴我能帮上忙。那么接受答案就好了;)(单击其评级下方的复选标记)