Use exceptions for errors that can't be handled locally and must propagate up. File not found, network failure, invalid input from external sources are good candidates. Don't use exceptions for normal control flow or expected conditions.
Checking if a key exists in a map shouldn't throw. Use return values for expected cases. Exceptions work best when errors are rare. The throw/catch mechanism has overhead compared to simple returns, so reserve it for actual exceptional situations.