#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
namespace nonstd
{
template<class ForwardIt, class T>
ForwardIt binary_search(ForwardIt first, ForwardIt last, const T & value)
{
auto [low, up] = std::equal_range(first, last, value);
if (low != up)
return low;
return last;
}
}
int main()
{
std::vector<int> data = { 3, 7, 5, 8, 7, 2, 9, 4, 1, 7, 6, 0 };
std::sort(std::begin(data), std::end(data));
copy(std::begin(data), std::end(data), std::ostream_iterator<int>(std::cout, " "));
std::cout << '\n';
int val = 7;
auto ans = nonstd::binary_search(std::begin(data), std::end(data), val);
if (ans != std::end(data))
std::cout << *ans << " found at index " << std::distance(std::begin(data), ans) << '\n';
else
std::cout << val << " not found\n";
}