函数对象无法正常工作
Function object not working properly
>我定义了以下函数对象:
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 ;
}
};
其中取消引用迭代器元组如下所示:
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 在 [第一个, 最后一个) 中,对于 [第一个, 最后一个] 中的每个迭代器 j, comp(*i, *j) 是假的。
因此,对于这个元组,不应该选择这个元组,运算符永远不会返回 false。请让我知道我做错了什么
谓词有助于算法确定首选哪个元素。如果谓词返回true
则算法优先rhs
而不是lhs
。如果它返回false
则算法更喜欢lhs
而不是rhs
。在谓词始终返回true
的情况下,算法将选择数组中的最后一个元素。对于 stl 和推力算法都是如此。
我猜,您的结果在比较过程中从未像lhs
那样发生,并且每次都没有过滤,因为 rhs 的第二个值小于 0.99。
如果你想过滤这样的值,你最好重写你的谓词。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 为什么STD ::计数将常数传递给Lambda,而不是在弦上工作时而不是字符
- sdl软件渲染器不工作,工作在硬件加速的一个
- C++程序已停止工作-求解常微分方程