Функциональный объект не работает должным образом
Я определил следующий объект функции:
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 возвращает первый итератор i в [first, last), так что для каждого итератора j в [first, last) comp (* i, * j) ложно. "
Таким образом, нет способа выбрать это, поскольку для этого кортежа оператор никогда не возвращает false. Пожалуйста, дайте мне знать, что я делаю неправильно