如何在排序的C ++向量中找到值?

时间:2013-09-25 01:09:18

标签: c++ sorting search vector find

我查看了findbinary_search,但是find没有利用向量排序的事实,而binary_search只返回true或false,而不是它找到值的位置。是否有任何功能可以让我两全其美?

3 个答案:

答案 0 :(得分:37)

std::lower_bound会为你做到这一点。它位于binary_search顶部的等效行为部分。

答案 1 :(得分:14)

有一个方法std::equal_range,它会给你一对包含保持所需值的子集的下限和上限。如果对中的这两个项目都相同,那么您要查找的值就不存在。

答案 2 :(得分:2)

template<class T, class U>
bool contains(const std::vector<T>& container, const U& v)
{
    auto it = std::lower_bound(
        container.begin(),
        container.end(),
        v,
        [](const T& l, const U& r){ return l < r; });
    return it != container.end() && *it == v;
}