使用 Functor / Predicate 查找向量中小于其前任的第一个元素

Posted

技术标签:

【中文标题】使用 Functor / Predicate 查找向量中小于其前任的第一个元素【英文标题】:Use Functor / Predicate to find the first element smaller than its predecessor in vector 【发布时间】:2021-12-30 22:32:57 【问题描述】:

目前我正在尝试使用函数对象来查找小于向量中前一个元素的第一个元素。 例如我有向量v,它的内容是 25, 30, 10, 40; 我尝试玩弄函子和算法库,但我无法得到正确的结果。 我的尝试是:

auto target = find_if( v.begin( ), v.end( ), &greaterneighbour );
if ( target != v.end( ) )
    cout << target << endl;

我尝试实现的仿函数是不正确的,并且仅适用于预设元素(例如将每个元素与 4 进行比较)。 我的问题是如何使用函子来比较向量的两个元素。

【问题讨论】:

@TanveerBadar 感谢您的快速响应,我想这是我唯一的选择。 我错了,确实也有这样的算法。请参阅下面的答案。 【参考方案1】:

您可以为此使用std::adjacent_find()

auto iter = std::adjacent_find(begin(v), end(v), [](const auto& a, const auto& b)  return a < b; );

【讨论】:

谢谢你,成功了!

以上是关于使用 Functor / Predicate 查找向量中小于其前任的第一个元素的主要内容,如果未能解决你的问题,请参考以下文章

Functor组合的例子

`re.sub(pattern, functor, string)` 用于 C++

仿函数(functor)

Not a Functor/Functor/Applicative/Monad 的好例子?

函数对象(仿函数 functor)

c++仿函数 functor