Objeto de função não está funcionando corretamente
Eu defini o seguinte objeto de função:
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 ;
}
};
onde o DereferencedIteratorTuple é o seguinte:
typedef thrust::tuple<int, float,int> DereferencedIteratorTuple;
Além disso, eu chamo da seguinte forma:
result = thrust::max_element(iter_begin, iter_end, Predicate1());
Mas o resultado é a tupla (3, 0,99). Estou confuso porque este é o resultado porque a condiçãoget<0>(lhs)== get<2>(lhs)
não segura noif
para esta tupla. Assim, o operador retorna true para cada comparação dessa tupla. Contudo,thrust::max_element
é definido da seguinte forma:
"Esta versão compara objetos usando uma função objeto comp. Especificamente, esta versão de max_element retorna o primeiro iterador i em [primeiro, último) tal que, para cada iterador j em [primeiro, último], comp (* i, * j) é falso."
Portanto, não há como isso ser escolhido, pois o operador nunca retorna false. Por favor, deixe-me saber o que estou fazendo errado