- 主题:特殊情况下的 lower_bound() 和 upper_bound()
有个问题,请教一下各位方家。
正常情况下,std::lower_bound() 和 upper_bound() 是在数组或vector里查找,返回数组内某地址或vector的iterator
。
如果我想查找的东西,没有对应的数组或vector,怎么办?比如,在一个数的范围内查找,i 在 0-100 范围内,但 i 对应的值不是 a[i],而是通过一个函数算出来的 foo(i). 希望找到 foo(i) 的 lower 或 upper bound,应该怎么搞?希望得到对应的 i 值。
foo(i) 的值不像数组或vector是事先就有的,而是每次计算出来的,所以也无从返回数组地址或vector的iterator。
谢谢~
--
FROM 111.197.254.*
你为啥非要用这个函数呢?
【 在 alewa 的大作中提到: 】
: 有个问题,请教一下各位方家。
:
: 正常情况下,std::lower\_bound() 和 upper\_bound() 是在数组或vector里查找,返回数组内某地址或vector的iterator
: 。
:
: 如果我想查找的东西,没有对应的数组或vector,怎么办?比
: ..................
发自「今日水木 on 钛星」
--
FROM 222.129.54.*
没说一定要用,只是问问stl里有这种支持没有。
【 在 ble 的大作中提到: 】
: 你为啥非要用这个函数呢?
: 发自「今日水木 on 钛星」
--
FROM 111.197.254.*
xxxx_bound只要求1)随机迭代器和2)容器已排好序。【i】本来就是一个函数,和你的foo(i)没任何区别。
所以只要你的foo(i)是单调函数,满足排序的要求,自己定义个迭代器,就可以用了。
有C++20 Range之后,应该会简单很多。先iota再transform再lower_bound
--
FROM 222.129.54.*
没有。
除非你自己实现iterator。
不过那还不如自己撸一个lower_bound()。
lower_bound()是有模板的,也是二分查找实现最不容易出错的。
https://www.zhihu.com/question/36132386
【 在 alewa 的大作中提到: 】
: 没说一定要用,只是问问stl里有这种支持没有。
:
--
修改:allegro FROM 73.162.73.*
FROM 73.162.73.*
std::set<double> s;
for i in 0..100
s.insert(foo(i))
low = s.front()
upper = s.back()
【 在 alewa 的大作中提到: 】
: 有个问题,请教一下各位方家。
: 正常情况下,std::lower_bound() 和 upper_bound() 是在数组或vector里查找,返回数组内某地址或vector的iterator
: 。
: ...................
--
FROM 124.114.151.*
你可能需要用到C++ 20 的ranges
【 在 alewa 的大作中提到: 】
: 有个问题,请教一下各位方家。
: 正常情况下,std::lower_bound() 和 upper_bound() 是在数组或vector里查找,返回数组内某地址或vector的iterator
: 。
: ...................
--
FROM 75.102.1.*