【问题标题】:Create a discrete distribution from transformed container elements从转换的容器元素创建离散分布
【发布时间】:2018-09-12 14:25:49
【问题描述】:

假设我们有一个std::vector<T> v 并且T 是一个具有成员函数U T::f() const 的类,其中U 可以转换为double。我想创建一个std::discrete_distribution<> d(/* v[0].f(), ..., v[v.size() - 1].f() */)。如果不创建包含值 v[0].f(), ..., v[v.size() - 1].f() 的新容器,这是否可能?

【问题讨论】:

  • transform_iterator(来自 boost 或 range 库)。
  • 如果你可以创建一个transformation iterator tit,你可以使用d(tit, end(v))

标签: c++ iterator c++17


【解决方案1】:

boost::transform_iterator 之类的东西可以做到这一点。您只需要从向量的迭代器中创建它们。

【讨论】:

    【解决方案2】:

    如果您可以将operator double 添加到T,那么您可以返回f(),然后使用std::discrete_distribution 的迭代器构造函数类似

    struct Foo
    {
        operator double() const { return f(); }
        double f() const { return 1.0; }
    };
    
    int main()
    {
        std::vector<Foo> foo(10);
        std::discrete_distribution dd{foo.begin(), foo.end()};
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 2021-10-29
      • 2021-03-04
      • 1970-01-01
      相关资源
      最近更新 更多