如何在循环中随机化不同的值?c ++

How to randomize different values in a loop? c++

本文关键字:循环 随机化      更新时间:2023-10-16

我想分配不同的随机值(索引(来填充向量。 每次运行程序时,它都会产生不同的随机值。但是,对于相同的运行,它在循环的每次迭代中生成相同的随机值。

这是我的代码:

void hire (vector<PersonType> &salaryMan, vector<CompanyType> &company){
double payment;
string role;
int i;
int j;
for (int x =0; x <5; x++){
i =randomizeEmp(salaryMan);
payment =salaryMan[i].getSalary();
role =salaryMan[i].getTitle();      
j =randomizeEmp(salaryMan);
salaryMan[j].setTitle(role);
salaryMan[j].setSalary(payment);
company[x].employee.push_back(salaryMan[j]);
}
}
int randomizeEmp(vector<PersonType> &v){
double i;
int minNumOfEmp =0;
unsigned seed =time(NULL);
srand(seed);
i =minNumOfEmp +rand()% ((v.size()-1) - minNumOfEmp);
cout <<i<<endl;
return i;
}

我的输出如下: 佛罗里达迈阿密 100 公司 利内特·勒弗斯 529 合伙人G 600000 利内特·勒弗斯 529 合伙人G 600000 利内特·勒弗斯 529 合伙人G 600000 利内特·勒弗斯 529 合伙人G 600000



利内特·勒弗斯 529 合伙人G 600000
公司B 纽约 纽约 101 利内特·勒弗斯 529 合伙人G 600000 利内特·勒弗斯 529 合伙人G 600000 利内特·勒弗斯 529 合伙人G 600000 利内特·勒弗斯 529 合伙人G 600000



利内特·勒弗斯 529 合伙人G 600000
公司C加州圣何塞 102 利内特·勒弗斯 529 合伙人G 600000 利内特·勒弗斯 529 合伙人G 600000 利内特·勒弗斯 529 合伙人G 600000 利内特·勒弗斯 529 合伙人G 600000



利内特·勒弗斯 529 合伙人G 600000
德克萨斯州达拉斯 103 利内特·勒弗斯 529 合伙人G 600000 利内特·勒弗斯 529 合伙人G 600000 利内特·勒弗斯 529 合伙人G 600000 利内特·勒弗斯 529 合伙人G 600000



利内特·勒弗斯 529 合伙人G 600000
E公司 佛罗里达塔拉哈斯 104 利内特·勒弗斯 529 合伙人G 600000 利内特·勒弗斯 529 合伙人G 600000 利内特·勒弗斯 529 合伙人G 600000 利内特·勒弗斯 529 合伙人G 600000 利内特·勒弗斯 529 合伙人G 600000



unsigned seed = time(NULL);
srand(seed);

这是您通常希望在程序启动时执行一次的操作。

每次你在同一秒内执行此操作(在计算机世界(a(中,很多事情都在一秒内发生(,它将在同一点重新启动序列。


(a(可能需要不到一秒的一件事是,在你的hire()函数中,五次迭代,不涉及太多工作,for循环。因此,可能它的每次迭代都会使用相同的种子。