761. unordered_map needs an at() member function

Section: 26.5.4.3 [unord.map.elem] Status: CD1 Submitter: Joe Gottman Opened: 2007-11-15 Last modified: 2016-02-10

Priority: Not Prioritized

View all issues with CD1 status.

Discussion:

The new member function at() was recently added to std::map(). It acts like operator[](), except it throws an exception when the input key is not found. It is useful when the map is const, the value_type of the key doesn't have a default constructor, it is an error if the key is not found, or the user wants to avoid accidentally adding an element to the map. For exactly these same reasons, at() would be equally useful in std::unordered_map.

Proposed resolution:

Add the following functions to the definition of unordered_map under "lookup" (26.5.4 [unord.map]):

mapped_type& at(const key_type& k);
const mapped_type &at(const key_type &k) const;

Add the following definitions to 26.5.4.3 [unord.map.elem]:

mapped_type& at(const key_type& k);
const mapped_type &at(const key_type &k) const;

Returns: A reference to x.second, where x is the (unique) element whose key is equivalent to k.

Throws: An exception object of type out_of_range if no such element is present.

[ Bellevue: Editorial note: the "(unique)" differs from map. ]