比较向量中的元素并返回对象的最佳方法
Posted
技术标签:
【中文标题】比较向量中的元素并返回对象的最佳方法【英文标题】:Best way to compare elements in a vector and return a object 【发布时间】:2009-01-30 16:23:46 【问题描述】:我有一个用例,其中数字在整数向量中单调递增
vec[0] = 2
vec[1] = 5
vec[2] = 8
vec[3] = 10
..
如果我通过了 6 号,我想返回 vec[1],因为它位于 vec[1] 和 vec[2] 之间,类似地,如果通过 9 号必须返回 vec[2]。我对 STL 的经验是有限的,所以想检查一下我们是否可以用 STL 解决这个问题,或者您必须通过存储前一个来迭代每个,并且当遇到大于您返回的传递数字的数字时
【问题讨论】:
【参考方案1】:STL 在<algorithm>
标头中有四种可重用的二进制搜索算法:lower_bound
、upper_bound
、equal_range
和binary_search
。
lower_bound
并不完全符合您的要求:当序列中不存在所需的元素时,它会返回一个迭代器,该迭代器引用您想要的元素之后的元素。但是,您应该能够使用实现您的行为的代码来包装它,而不会有太多麻烦。
【讨论】:
【参考方案2】:你可以使用二分搜索。
【讨论】:
【参考方案3】:<algorithm>
标头中有一个binary_search()
函数。不幸的是,这个函数只返回一个布尔值。您可以在排序后的向量上编写自己的二进制搜索,对于大型列表,这比进行原始帖子中暗示的线性搜索要快。 (如果我误读了帖子,请道歉)。
【讨论】:
这是一个很好的例子,说明为什么好的命名很重要。许多正在寻找二分搜索的人不会找到 lower_bound、upper_bound 或 equal_range,除非他们已经知道这些也是二分搜索。以上是关于比较向量中的元素并返回对象的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章