从转换后的容器元素创建离散分布

Create a discrete distribution from transformed container elements

本文关键字:创建 分布 元素 转换      更新时间:2023-10-16

假设我们有一个std::vector<T> vT是一个具有成员函数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()值的新容器的情况下

进行?

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

如果可以向T添加一个operator double,则可以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()};
}