如果我们有对的矢量,如何进行下限二进制搜索
How to make lower bound binary search if we have vector of pairs
我正在尝试在我的C 程序中实现lower_bound函数,但是问题下一个:它可以与向量搭配使用,但是如果我们必须在配对上搜索向量
我有一个对向量对,我想首先搜索该对的第一个成员,如果我们有多个值具有相同值的值,我想返回第二个值的最小值,例如:
假设我们有以下对向量
v = {(1,1),(2,1),(2,2),(2,3),(3,4),(5,6)};
假设我们正在搜索值k = 2,现在我想返回位置1(如果数组为0索引(,因为这对的第二个值为1和1是最小的。
。我如何以最简单的方式实现此目标,我尝试实施此功能,但它未能编译,这是我的代码:
vector<pair<int,int> >a,b;
void solve() {
sort(b.begin(), b.end());
sort(a.begin(), a.end());
vector<int>::iterator it;
for(int i=0;i<a.size();i++) {
ll zero=0;
int to_search=max(zero, k-a[i].first);
it=lower_bound(b.begin(), b.end(), to_search);
int position=it-b.begin();
if(position==b.size()) continue;
answer=min(answer, a[i].second+b[position].second);
}
}
换句话说,我正在寻找第一个值,但是如果有更多值返回最小的第二个元素。
预先感谢。
较少的运算符在配对上工作,因此您可以直接使用
std::lower_bound(v.begin(), v.end(), std::make_pair(2, std::numeric_limits<int>::min()));
相关文章:
- 在CRC-16 CCITT中将数据从二进制解码为文本,我应该输入一个码字,使用CRC生成器进行编码
- 如何在向量上进行二进制搜索以找到具有特定id的元素
- 如果我们有对的矢量,如何进行下限二进制搜索
- 在C 中对二进制对象进行编码/解码的标准方法
- 在学校进行二进制到十进制的练习
- 对大于属性的元素的矢量对象进行二进制搜索
- 一半填充二进制搜索树进行测试的最佳方法
- 使用OTool进行了重构代码的二进制比较
- C++ 如何通过套接字 (TCP) 进行二进制序列化
- 使用 fwrite() 和 fread() 进行二进制输入/输出
- 在c++中使用2d数组进行二进制搜索
- 使用 fwrite/fread 对矩阵进行二进制(反)序列化不起作用
- 使用环绕式c++对两个数字进行二进制加法运算
- 在C++中对数组进行二进制搜索
- 通过递归进行二进制搜索
- 我们可以依靠op==来对浮点值进行二进制比较吗?
- Boost::serialization——是否有一种可移植的方法来对std::wstring进行二进制序列化?
- 通过传递子迭代器进行二进制搜索
- 对排序数组中的极端元素进行二进制搜索时输出错误
- 如何对std::map中的一部分键进行二进制搜索