我使用Boost C ++生成具有不同给定范围的随机整数样本。每个范围对应一个组。例如,对于范围(低,高),我可以使用:
boost::mt19937 engine (seed);
boost::bind(boost::random::uniform_int_distribution<>(low, high), engine);
我有22个这样的组(每个组具有不同的给定范围),我需要从每个uniform_int_distribution(对应于每个组)创建大量(总共2千万)个样本。
为了提高效率,我想将不同的uniform_int_distributions保存在数组或向量中:
vector <boost::???> distributions_groups[22];
我怎么能这样做?
答案 0 :(得分:0)
您可以通过打包到std::vector<boost::function<int (void)>> distributions_groups;
distributions_groups.push_back
(
boost::bind
(
boost::random::uniform_int_distribution<>(low, high)
, engine
)
);
:
{{1}}
请注意,标准库中提供了所有这些内容(假设支持C ++ 11标准)。
答案 1 :(得分:0)
我想你想要保存vector
中的随机数。
我会改用lambda。
boost::mt19937 engine( seed ) ;
boost::random::uniform_int_distribution<int> distribution(
min,
max);
std::vector < std::vector<int> >
distributions_groups( 22 , std::vector<int>(each_vec_size) );
auto gen = [distribution, &engine]() { return distribution(engine); } ;
// Example :
for (auto i : distributions_groups)
{
std::generate( begin(i) , end(i) , gen );
std::cout << '\n';
for (auto j : i)
{
std::cout << j << " ";
}
}