首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结构的discrete_distrubution

结构的discrete_distrubution
EN

Stack Overflow用户
提问于 2015-10-31 19:17:31
回答 2查看 52关注 0票数 1

我有一个真实价值的vector

代码语言:javascript
复制
vector<double> values;

和一个discrete_distribution

代码语言:javascript
复制
discrete_distribution<size_t> dis(values.begin(), values.end());

但是现在我需要double值的向量变成结构的向量:

代码语言:javascript
复制
struct Data
{
   double value;
   int index;
};

vector<Data> values;

如何在不将值复制到分隔的discrete_distribution的情况下构建相应的vector

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-31 19:36:49

似乎可以使用以下重载(数字4)

代码语言:javascript
复制
template< class UnaryOperation >
discrete_distribution(std::size_t count, double xmin, double xmax,
                      UnaryOperation unary_op);

就像这样。

代码语言:javascript
复制
std::discrete_distribution<int>
make_distribution(const std::vector<Data>& weights)
{
  const auto n = weights.size();
  const auto op = [&weights](double d){
    const auto index = static_cast<std::size_t>(d - 0.5);
    //std::cout << "weights[" << index << "].value == " << weights[index].value << "\n";
    return weights[index].value;
  };
  return std::discrete_distribution<int> {n, 0.0, static_cast<double>(n), op};
}

它应该能起作用,但这是一种假话。

票数 1
EN

Stack Overflow用户

发布于 2015-10-31 19:22:34

Boost有一个迭代器,它可以转换迭代器的返回值:

代码语言:javascript
复制
const double get_value(const Data & d)  { return d.value; }


auto beg = boost::make_transform_iterator(values.begin(), get_value);
auto end = boost::make_transform_iterator(values.end(), get_value);
discrete_distribution<size_t> dis(beg, end);

(基于这个答案)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33455578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档