数据在向量中的均匀分布

Evenly distribution of data in vector

本文关键字:分布 向量 数据      更新时间:2023-10-16

我想把一个52个数的向量平均分配到另外两个向量中。这样,每个相应的向量将有26个从主向量随机取的值。在这个例子中,它是存储在

vector<int>p1;
vector<int>p2;
for(int i=0;i<=storein.size();i++)  //storein has a size of 52
{
int a=rand()%storein.size()+1;
int b=rand()%storein.size()+1;
if(a!=0)
{
cout<<"First player draw"<<endl;
p1.push_back(a);
cout<<p1[i]<<endl;
}
if(b!=0)
{
cout<<"Second player draw"<<endl;
p2.push_back(b);
cout<<p2[i]<<endl;
}
}
cout<<"p1 "<<p1.size()<<" p2 "<<p2.size()<<endl;

您可以对输入向量进行洗牌,然后将前26个条目放在p1中,最后一个放在p2中:

std::mt19937 rd{std::random_device{}()};
std::shuffle(input_vec.begin(),input_vec.end(),rd);
std::vector<int> p1 {input_vec.begin(),input_vec.begin()+26};
std::vector<int> p2 {input_vec.begin()+26, input_vec.end()};

如果您不想更改input_vec,只需复制一份。

请注意,这种播种mt19937的方式可能不是很理想,因为它的状态空间比32位种子大得多。对于玩具程序和您的标准编程任务来说,这并不重要,但为了完整性起见:以下是我对正确地播种整个状态空间的看法。

最后一句:不要用rand(),它不好。