gpt4 book ai didi

c++ - 无需创建 T 元素的 lower_bound 功能

转载 作者:行者123 更新时间:2023-11-30 02:45:58 24 4
gpt4 key购买 nike

我有一个 T 类,它有一个属性 (int f() const)。我有一个 T vector ,它是根据此属性排序的。我想对元素执行对数搜索以找到调用 f() 不小于输入的第一个元素。

std::vector<T> v;
// Filling of v
int lob = 1234;
// This next line is an illustration of intent:
std::lower_bound(v.begin(),v.end(),lob
,/* ??? if(element.f() < lob) return true; */ );

解决方法是创建一个 T 的实例,它会在 f() 被调用时返回 lob 的值。假设像这样创建一个虚拟 T 会过于困难。如何在不创建 T 的情况下执行此搜索?

我可以为这个问题编写对数搜索,但我想知道是否有任何通用的解决方案。我也对 C++11 之前和之后的解决方案感兴趣。

最佳答案

在 C++11 中,您可以为比较器使用 lambda 表达式:

auto it = std::lower_bound(v.begin(), v.end(), lob,
[](T const & x, int n) { return x.f() < n; });

如果你是函数式组合风格的粉丝,你也可以使用嵌套的bind表达式:

using std::placeholders::_1;
using std::placeholders::_2;
auto it = std::lower_bound(
v.begin(), v.end(), lob,
std::bind(std::less<int>(), std::bind(&T::f, _1), _2));

关于c++ - 无需创建 T 元素的 lower_bound 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24033400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com