具有lambda的对的向量的下界
lower_bound of vector of pairs with lambda
我想根据带有lambda的第二个元素找到std::pair
的std::vector
的std::lower_bound
。
std::vector < std::pair <int, double> > vec;
vec.resize(5);
auto it = std::lower_bound(vec.begin(), vec.end(), lambda);
// what is that lambda here?
这里缺少一个参数,std::lower_bound
采用一个开始和结束迭代器,一个值(这就是您所缺少的),最后可以采用一个lambda。
#include <algorithm>
#include <vector>
int main()
{
typedef std::pair<int, double> myPair; // typedef to shorten the type name
std::vector <myPair> vec(5);
myPair low_val; // reference value (set this up as you want)
auto it = std::lower_bound(vec.begin(), vec.end(), low_val,
[](myPair lhs, myPair rhs) -> bool { return lhs.second < rhs.second; });
}
lower_bound的参考页在这里。
lower_bound
的目的是找到元素的位置。所以你必须指定那个元素。如果你只想按第二个合作伙伴排序,那么你只需要指定一个值:
std::vector<std::pair<int, double>> vec = /* populate */ ; // must be sorted!
double target = 1.3;
auto it = std::lower_bound(vec.begin(), vec.end(), target,
[](std::pair<int, double> const & x, double d)
{ return x.second < d; });
请注意,向量必须根据相同的谓词进行排序,因此您可能希望更永久地存储谓词:
auto lb_cmp = [](std::pair<int, double> const & x, double d) -> bool
{ return x.second < d; };
auto sort_cmp = [](std::pair<int, double> const & x,
std::pair<int, double> const & y) -> bool
{ return x.second < y.second; };
std::sort(vec.begin(), vec.end(), sort_cmp);
auto it = std::lower_bound(vec.begin(), vec.end(), target, lb_cmp);
相关文章:
- 如何修改 lambda 内部字符串的向量
- 使用多个输入向量中值的笛卡尔乘积调用 lambda
- 具有 lambda 函数的函数向量
- 我正在尝试找到一个特定的结构成员,该成员是使用 lambda 函数的结构向量
- 插入向量时,使用lambda的返回而不是函数的返回是否有意义?
- 在使用 std::sort() 和 lambda 函数按属性对 ADT 的向量进行排序时遇到问题
- 列出生成器(lambda的向量)会导致通过引用捕获的非常奇怪的行为
- 在为工作线程访问 lambda 中捕获的向量列表中的元素引用时,是否需要互斥锁?
- parallel_for lambda 函数填充 2D 向量后出错
- 在lambda中捕获各种向量使元素const
- 使用lambda函数将向量与另一个向量进行分类
- 采用向量中包含的唯一指针的 Lambda 表达式
- 为什么在重载的 ostream 运算符中引用 lambda 中的向量会导致错误
- 在编写 lambda 函数向量时出现隔离错误
- 在 lambda 表达式中自动推导出的类型是什么,用于修改 bool 类型的向量(特殊容器)
- C++11 使用 lambda 排序向量来跟踪索引
- 如果返回了向量的一个项,lambda表达式的返回类型是什么
- 在 lambda 函数中传入 >1 向量的方法C++
- C++对不带lambda的索引向量进行排序
- 对具有 lambda 谓词的向量进行部分排序