【发布时间】:2015-05-20 14:12:26
【问题描述】:
这里我使用std::lower_bound() 创建了一个二分查找函数。如下所示。如果我通过std::pair,这工作正常,但是我只想对pair 的第一个值执行二进制搜索。我认为在lower_bound() 的Comp 参数中可以做到这一点,但不完全确定如何。
即我的向量如下所示。
std::vector<std::pair<int,double>> v;
我只想比较第一个值,即int。
template<class ForwardIt, class T>
ForwardIt binary_searcht(ForwardIt first, ForwardIt last, const T& value)
{
ForwardIt i = std::lower_bound(first, last, value);
if (i != last && !(value < *i))
return i;
else
return last;
}
【问题讨论】:
-
在类型已知的情况下,为什么要将函数定义为模板?这只会使问题复杂化。
-
@MarkRansom 因为我需要返回一个迭代器。正常二进制搜索返回一个布尔值
-
几个注意事项:1)
lower_bound期望vector预先排序(匹配比较函数),2) 标准库支持比较pairs -a < bifa.first < b.first或a.first == b.first && a.second < b.second- 因此您可以使用i = std::lower_bound(first, last, { value.first, std::numeric_limits<double>::min() });而不定义自己的比较(但我怀疑它会被 NaN 抛出)。
标签: c++ binary-search