Distinguish among count, find, binary_search, lower_bound,
upper_bound, and equal_range.
For unsorted range, just generic find() or find_if()algorithm or count. return last if no find element.
For sorted range, Only four binary_search, lower_bound,upper_bound, and equal_range. are used on a sortedrange.
For set or map, It has own version, find(),count() andlower_bound, upper_bound, and equal_range
Don’t use generic find() algorithm on a sorted range, use
binary_search(). binary_search just return bool, not position.
find() will return match iterator, if no match, it will return
end()(for map or set). or last iterator(for generic algorithm). but
Lower_bound will return a position anyway, match position or
insert position(no match).
Lower bound: first element that is greater-or-equal. Upper bound:
first element that is strictly greater. equal_range return a pair of
(lower_bound, Upper_bound).
equal_range if two iterators equal, (no found,). if two iterators distance
>=1, (find one or more match, can replace find() or count() function.) .