I think this is one area where the standard library was
well designed instead.
EDIT:
On second thought, if you are referring to the need to compare with map.end(), then perhaps that could have been done differently, e.g., to return a singular iterator that evaluates to false, whereas all non-end iterators evaluate to true. On the other hand, the safe bool idiom was not known at the time these class templates were designed, conversion to void* had its problems, and comparison with end() is consistent with the usual range comparison, so it is still a stretch to say that "the standard library was so poorly designed" in this area.