我需要像rand()这样的东西,但我只希望每个数字一次。
在示例中,我有10" .txt"名为number(1-10)的文件。 我想读一下里面的内容,并随机播放,但随机。
我不想要1.txt - > 2.txt - > 3.txt - > ... 但是像
那样随意5.txt - > 4.txt - > 1.txt - > ...
每个号码只能出现一次
是否有"容易"这样做的方法?
string Path = "./Questions_Niko/" + random + ".txt";
答案 0 :(得分:6)
创建所需数字的vector并使用std::shuffle。
然后按顺序迭代向量。
答案 1 :(得分:2)
有几种方法。例如,您可以使用标头std::random_shuffle
<algorithm>
例如
#include <algorithm>
#include <iterator>
//...
int main()
{
int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
std::random_shuffle( std::begin( a ), std::end( a ) );
for ( int i : a )
{
// some stuff
}
}
另一种方法是使用标准类std::bitset
并在集合中为已选择的数字设置相应的位。
答案 2 :(得分:0)
为每个结果创建一个hashmap。如果确实存在,请重新生成它。
答案 3 :(得分:0)
std::random_shuffle
可能符合您的需求,但如果您不能/不想,可以借mshuffle:
int mix[10];
int swap;
for (i = 9; i >= 0; i--) {
int j = rand() % i;
swap = mix[j];
mix[j] = mix[i];
mix[i] = swap;
}
假设您先调用srand()
,这会混合名为mix
的数组。它不必是int
s的数组。
答案 4 :(得分:-1)
使用srand()
将解决您的问题
//Randomize seed
srand(time(NULL));
for(i to size)
Arr[i]=rand()%size