私の以前の質問に答えて、誰かが私に次のコードをくれました:
thrust::device_vector<bool> bools;
thrust::device_vector<float> values;
typedef thrust::device_vector<bool>::iterator BoolIterator;
typedef thrust::device_vector<float>::iterator ValueIterator;
typedef thrust::tuple<BoolIterator, ValueIterator> IteratorTuple;
typedef thrust::zip_iterator<IteratorTuple> ZipIterator;
ZipIterator iter_begin(thrust::make_tuple(bools.begin(), values.begin()));
ZipIterator iter_end(thrust::make_tuple(bools.end(), values.end()));
struct Predicate
{
__host__ __device__ bool operator ()
(const IteratorTuple& lhs, const IteratorTuple& lhs)
{
if (get<0>(lhs) && get<0>(rhs) ) return get<1>(lhs) <= get<1>(rhs); else
return ! get<0>(lhs) ;
}
};
ZipIterator result = thrust::max_element(iter_begin, iter_end, Predicate());
Predicate 構造体を理解したい。演算子が false を返すとどうなりますか? どの値が選択されますか? 演算子が true を返すとどうなりますか? どの値が選択されますか?