# Element access

## at

>     value_type& at( const key_type& key );

>     const value_type& at( const key_type& key ) const;

> Returns: a reference to `item.second`, where `item` is the element with the key equivalent to `key`.

> Throws: `std::out_of_range` exception if the element with the key equivalent to `key` is not presented in the container.

## operator[]

>     value_type& operator[]( const key_type& key );

> If the element with the key equivalent to `key` is not presented in the container, inserts a new element constructed in-place from `std::piecewise_construct, std::forward_as_tuple(key), std::tuple<>()`.

> Requirements: the type `value_type` must meet the `EmplaceConstructible` requirements from the [container.requirements] ISO C++ Standard section.

> Returns: a reference to `item.second`, where `item` is the element with the key equivalent to `key`.

>     value_type& operator[]( key_type&& key );

> If the element with the key equivalent to `key` is not presented in the container, inserts a new element constructed in-place from `std::piecewise_construct, std::forward_as_tuple(std::move(key)), std::tuple<>()`.

> Requirements: the type `value_type` must meet the `EmplaceConstructible` requirements from the [container.requirements] ISO C++ Standard section.

> Returns: a reference to `item.second` where `item` is the element with the key equivalent to `key`.