我已经定义了下面的函数对象:
struct Predicate1
{
__device__ bool operator ()
(const DereferencedIteratorTuple& lhs, const DereferencedIteratorTuple& rhs)
{
using thrust::get;
//if you do <=, returns last occurence of largest element. < returns first
if (get<0>(lhs)== get<2>(lhs) && get<0>(lhs)!= 3) return get<1>(lhs) < get<1>(rhs);
else
return true ;
}
};
其中DereferencedIteratorTuple如下:
typedef thrust::tuple<int, float,int> DereferencedIteratorTuple;
此外,我把它叫做如下:
result = thrust::max_element(iter_begin, iter_end, Predicate1());
但结果是元组(3,.99,4)。 我很困惑,为什么是这样的结果,因为条件get<0>(lhs)== get<2>(lhs)
不会在持有if
该元组。 因此,运营商对这个元组的每个比较返回true。 然而, thrust::max_element
定义如下:
“这个版本比较了使用一个函数对象补偿对象。具体地,该版本max_element在返回第一个迭代I [第一,最后一个),使得对于在每一个迭代f] [第一,最后一个),对比例(* 1,* j)的是假的。”
因此,有没有办法这应该被选择作为该元组,运算符从不返回false。 请让我知道我做错了