比较向量中的元素并返回对象的最佳方法

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_boundupper_boundequal_rangebinary_search

lower_bound 并不完全符合您的要求:当序列中不存在所需的元素时,它会返回一个迭代器,该迭代器引用您想要的元素之后的元素。但是,您应该能够使用实现您的行为的代码来包装它,而不会有太多麻烦。

【讨论】:

【参考方案2】:

你可以使用二分搜索。

【讨论】:

【参考方案3】:

<algorithm> 标头中有一个binary_search() 函数。不幸的是,这个函数只返回一个布尔值。您可以在排序后的向量上编写自己的二进制搜索,对于大型列表,这比进行原始帖子中暗示的线性搜索要快。 (如果我误读了帖子,请道歉)。

【讨论】:

这是一个很好的例子,说明为什么好的命名很重要。许多正在寻找二分搜索的人不会找到 lower_bound、upper_bound 或 equal_range,除非他们已经知道这些也是二分搜索。

以上是关于比较向量中的元素并返回对象的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

在c ++中返回指向向量元素的指针

C++ 从函数调用的多次返回中构建字符串向量的最佳方法

C ++在向量迭代中删除并返回指向对象的指针

agrep:只返回最佳匹配

c++ 以最佳方式返回结构和向量

R语言学习:提取R对象的子集