Could you advise on this binary search implementation? ``` template<typename Iterator, typename T> Iterator binarySearch(Iterator begin, Iterator end, const T& v) { Iterator low = begin; Iterator high = end - 1; while (low <= high) { Iterator mid = low + (high - low) / 2; if (*mid == v) { return mid; } else if (*mid < v) { low = mid + 1; } else { if (mid == begin) { return end; } high = mid-1; } } return end; } ``` The `mid==begin` line is unfortunate but cannot think of a more elegant approach here, welcoming ideas.