Я пытаюсь выполнить уменьшение преобразования для вектора структур. Структура содержит два числа. Я хочу, чтобы унарная функция что-то делала с этими двумя числами и возвращала по одному значению для каждой структуры в моем векторе и уменьшала с суммированием этих значений. Как мне написать свой функтор для доступа к значениям в структуре?
например, каков правильный синтаксис для 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)
Отказ от ответственности:
Поскольку вы, очевидно, не опубликовали реальный код, а ваш пример выглядит как несколько не связанных строк кода, мой ответ может не соответствовать тому, что вы ищете — SSCCE было бы хорошо.
Если я правильно понимаю, вы хотите преобразовать вектор MyStruct
s к сумме всех значений элементов структуры. Для этого вам нужно двоичное дополнение (thrust::add
) и унар MyStruct
и возвращая сложение значений его членов:
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);
НТН
Других решений пока нет …