Для этого и нужны шаблоны. Действительно, так работает сам вектор !!
template <typename ElementType>
bool DoMyBinarySearch(const std::vector<ElementType>& container, const ElementType& value)
{
auto it = std::lower_bound(std::begin(container), std::end(container), value);
return it != std::end(container) && *it == value;
}
Вы можете даже подумать о том, чтобы container набрал аргумент шаблона, чтобы вы не ограничивались векторами (хотя это может в этом случае бесполезно).
В этом примере также не рассматриваются альтернативные распределители или альтернативные компараторы, которые могут иметь или не иметь значения для вас. cppreference.com's std::lower_bound
article имеет более надежный пример.
Не забудьте задокументировать предварительное условие, что container
должен быть отсортирован.