如何在向量中保存不同的分布

How to save different distributions in a vector

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

我正在使用 Boost C++ 生成具有不同给定范围的随机整数样本。每个范围对应一个组。例如,对于范围(低、高),我可以使用:

boost::mt19937 engine (seed); boost::bind(boost::random::uniform_int_distribution<>(low, high), engine);

我有 22 个这样的组(每个组都有不同的给定范围),我需要从每个uniform_int_distribution(对应于每个组)创建大量(总共 2000 万个)样本。

为了提高效率,我想将不同的uniform_int_distributions保存在数组或向量中:
vector <boost::???> distributions_groups[22];

我该怎么做?

您可以通过

包装到boost::function来存储它们:

std::vector<boost::function<int (void)>> distributions_groups;
distributions_groups.push_back
(
    boost::bind
    (
        boost::random::uniform_int_distribution<>(low, high)
    ,   engine
    )
);

请注意,所有这些东西都可以在标准库中找到(假设支持 C++11 标准)。

我想你想在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 << " ";
      }
   }

在这里演示