![]() |
#2
rohalloway2018-11-28 17:21
|

#include <iostream>
#include <vector>
#include <ctime>
#include <string>
#include <algorithm>
#include <random>
using namespace std;
class A{
public:
static string getName();
};
string A::getName(){
vector<string> v1{ "张","王", "李", "赵", "周", "吴", "郑", "王", "安", "高" };
vector<string> v2{ "小","晓", "明", "月", "佳", "志", "其", "世", "玉", "丽" };
vector<string> v3{ "明","新", "锋", "", "林", "红", "艳", "", "强", "" };
vector<int> v{ 0,1,2,3,4,5,6,7,8,9 };
random_device rd;
mt19937 g(rd());
shuffle(v.begin(), v.end(), g);
return v1[v[0]] + v2[v[1]] + v3[v[2]];
}
int main()
{
for (int i = 0; i < 20; i++)
{
cout << A::getName() << endl;
}
system("pause");
return 0;
}
此代码段在vc下可以正确获得20个随机中文名
可能的输出:

/*
赵晓强 张世强 王世明 王世 周小新
安志新 李佳 吴月明 周明强 赵佳锋
张世林 赵志艳 赵明强 吴明林 周晓红
郑志锋 高其红 张晓锋 周晓 吴玉
*/
在mingw下,20个结果全部一样。
我尝试将
random_device rd;
mt19937 g(rd());
更改为
std::mt19937 g(time(NULL));
但问题没有得到解决,请问mingw下应该如何设置随机数种子才能解决这个问题,谢谢