我定义了以下函数对象:
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
定义如下:
“此版本使用函数对象 comp 比较对象。具体而言,此版本的 max_element 返回 [first, last) 中的第一个迭代器 i,这样,对于 [first, last) 中的每个迭代器 j,comp(*i, *j)是假的。”
因此,对于这个元组,没有办法选择它,运算符永远不会返回 false。请让我知道我做错了什么