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

use*_*274 35 c++ sorting search vector find

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

Ste*_*ard 41

std :: lower_bound会为你做这件事.它位于binary_search顶部的等效行为部分.

  • 请记住,为您提供大于或等于val的元素,因此您仍需检查它是否存在.但是这样做可能更有效率,而不是使用`std :: equal_range()`. (2认同)

pax*_*blo 15

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


Gab*_*ber 8

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 它没有回答OP问题(要求找到值的向量中的索引)并且它正在做https://en.cppreference.com/w/cpp/algorithm/binary_search已经在做的事情 (2认同)