lower_bound功能,而不创建T元素
lower_bound functionality without creating T element
我有一个T
类,它有一个属性(int f() const
(。我有一个向量T
s,它是关于这个性质排序的。我想对元素进行对数搜索,以找到调用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++ 的不同变量类型的结构元素创建动态数组?
- 如何创建一个所有行大小不同的 2D 数组,并且用户将指定每行将有多少个元素?
- push_back通过自行创建的对象获取最后一个元素的向量
- 动态分配列表 - 创建一个函数,用于删除所有包含偶数值的元素
- std::map:当元素不可默认构造时创建/替换元素
- 如何在新数组较小时创建新数组并将旧数组的最后一个元素复制到新数组中?
- 从转换后的容器元素创建离散分布
- 如何在 c++ 中创建对的优先级队列.这会弹出具有最小值的元素.默认的弹出最大值
- gStreamer 将元素添加到通过 gst_parse_launch 创建的管道中
- 我无法在用forward_as_tuple创建的元组中按类型访问元素
- 第 k 个最小元素 - 不能创建大于 k 大小的数组
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 我想创建一个嵌套数组,该数组由另一个数组中的所有元素组成,但分为两个
- r-在Rcpp和C++之间转换矢量(使用Rcpp::as或Rcpp:::wrap)是否会创建一个新的矢量并复制元素
- 解析字符串以创建元素列表
- 时间和空间复杂性在二叉树的每个级别创建元素向量(NON-BST)
- 首先创建字符串,然后通过移动语义将其添加到 vector 或在 vector 中创建元素是否具有内存效率
- 为什么'std::vector<int> b{2};'创建 1 元素向量,而不是 2 元素向量?
- 如何在VTK中动态创建元素
- lower_bound功能,而不创建T元素