【问题标题】:How to save different distributions in a vector [duplicate]如何在向量中保存不同的分布[重复]
【发布时间】:2017-10-23 16:00:26
【问题描述】:

我正在使用 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];

我该怎么做?

【问题讨论】:

    标签: c++ arrays boost


    【解决方案1】:

    您可以将它们包装成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 标准)。

    【讨论】:

      【解决方案2】:

      我猜你想保存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 << " ";
            }
         }
      

      Demo Here

      【讨论】:

      • 我认为你看错了
      猜你喜欢
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多