1

我正在尝试对结构向量执行变换归约。该结构包含两个数字。我希望一元函数对这两个数字做一些事情,并为我的向量中的每个结构返回一个值,并用这些值的总和进行归约。如何编写我的仿函数来访问结构中的值?

例如,函数中 mystruct.value1 的正确语法是什么?:

struct unary_op
{
    float operator()()
    {
        return mystruct.value1 + mystruct.value2; //function is a lot more complex 
    }
}

所以我可以这样做:

unary_op uop1;
thrust::transform_reduce(myvec.begin(), myvec.end(), uop1, 0, thrust::add)
4

1 回答 1

2

免责声明: 由于您显然没有发布真正的代码,并且您的示例看起来像一些不相关的代码行,因此我的答案可能不是您想要的 - SSCCE会很好。

如果我理解正确,您想将MyStructs 的向量转换为所有结构成员值的总和。为此,您需要二进制加法 ( thrust::add) 和一元运算,采用 aMyStruct并返回其成员值的加法:

struct MyStruct {
  float value1;
  float value2;
};
std::vector<MyStruct> myvec;

/* fill myvec */

//C++11 with lambdas:
auto result = thrust::transform_reduce(begin(myvec), end(myvec), 
  [](MyStruct const& ms) { //unary op for transform
    return ms.value1 + ms.value2;
  },
  0, thrust::add);

//C++03 with a functor:
struct MyStructReducer {
  float operator()(MyStruct const& ms) {
    return ms.value1 + ms.value2;
  }
};

float result = thrust::transform_reduce(myvec.begin, myvec.end(), 
  MyStructReducer(), 0, thrust::add);

您也可以使用免费函数而不是 Reducer 类。

//C++03 with a function:
float reduceMyStruct(MyStruct const& ms) {
  return ms.value1 + ms.value2;
}

/* ... */
float result = thrust::transform_reduce(myvec.begin, myvec.end(), 
  reduceMyStruct, 0, thrust::add);

高温高压

于 2013-02-14T07:48:03.970 回答