Функциональный объект не работает должным образом

Я определил следующий объект функции:

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. Пожалуйста, дайте мне знать, что я делаю неправильно

Ответы на вопрос(1)

Ваш ответ на вопрос