c++ - resueltos - imprimir un arreglo en c
¿Cómo encontrar un valor en un vector ordenado de C++? (3)
Hay un método, std::equal_range
, que le dará un par que contiene el límite inferior y superior del subconjunto que contiene el valor deseado. Si ambos elementos del par son idénticos, entonces el valor que estaba buscando no existe.
He buscado find y binary_search , pero find no aprovecha el hecho de que el vector está ordenado, y binary_search solo devuelve un verdadero o falso, no donde encontró el valor. ¿Hay alguna función que pueda darme lo mejor de ambos mundos?
std::lower_bound lo hará por usted. Está en la sección de comportamiento equivalente en la parte superior de binary_search.
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;
}