##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# Standard library header <unordered_map>

From cppreference.com
< cpp‎ | header

This header is part of the containers library.

### Includes
`<initializer_list>` (C++11)
### Classes
unordered_map (since C++11) | collection of key-value pairs, hashed by keys, keys are unique (class template) [edit]
unordered_multimap (since C++11) | collection of key-value pairs, hashed by keys (class template) [edit]
### Functions
operator==operator!= | compares the values in the unordered_map (function template) [edit]
std::swap(std::unordered_map) (C++11) | specializes the std::swap algorithm (function template) [edit]
operator==operator!= | compares the values in the unordered_multimap (function template) [edit]
std::swap(std::unordered_multimap) (C++11) | specializes the std::swap algorithm (function template) [edit]

### [edit] Synopsis

    #include <initializer_list>

    namespace std {

        // class template unordered_map:
        template <class Key,
            class T,
            class Hash = hash<Key>,
            class Pred = std::equal_to<Key>,
            class Alloc = std::allocator<std::pair<const Key, T> > >
        class unordered_map;

        // 23.5.5, class template unordered_multimap:
        template <class Key,
            class T,
            class Hash = hash<Key>,
            class Pred = std::equal_to<Key>,
            class Alloc = std::allocator<std::pair<const Key, T> > >
        class unordered_multimap;

        template <class Key, class T, class Hash, class Pred, class Alloc>
        void swap(unordered_map<Key, T, Hash, Pred, Alloc>& x,
                  unordered_map<Key, T, Hash, Pred, Alloc>& y);
        template <class Key, class T, class Hash, class Pred, class Alloc>
        void swap(unordered_multimap<Key, T, Hash, Pred, Alloc>& x,
                  unordered_multimap<Key, T, Hash, Pred, Alloc>& y);

        template <class Key, class T, class Hash, class Pred, class Alloc>
        bool operator==(const unordered_map<Key, T, Hash, Pred, Alloc>& a,
                                const unordered_map<Key, T, Hash, Pred, Alloc>& b);
        template <class Key, class T, class Hash, class Pred, class Alloc>
        bool operator!=(const unordered_map<Key, T, Hash, Pred, Alloc>& a,
                            const unordered_map<Key, T, Hash, Pred, Alloc>& b);
        template <class Key, class T, class Hash, class Pred, class Alloc>
        bool operator==(const unordered_multimap<Key, T, Hash, Pred, Alloc>& a,
                                const unordered_multimap<Key, T, Hash, Pred, Alloc>& b);
        template <class Key, class T, class Hash, class Pred, class Alloc>
        bool operator!=(const unordered_multimap<Key, T, Hash, Pred, Alloc>& a,
                            const unordered_multimap<Key, T, Hash, Pred, Alloc>& b);

    } // namespace std

#### [edit] Class std::unordered_map

    template <class Key,
        class T,
        class Hash = hash<Key>,
        class Pred = std::equal_to<Key>,
        class Allocator = std::allocator<std::pair<const Key, T> > >
    class unordered_map
    {
    public:
        // types
        typedef Key                                         key_type;
        typedef Key                                         value_type;
        typedef Hash                                        hasher;
        typedef Pred                                        key_equal;
        typedef Allocator                                   allocator_type;
        typedef typename allocator_type::pointer            pointer;
        typedef typename allocator_type::const_pointer      const_pointer;
        typedef typename allocator_type::reference          reference;
        typedef typename allocator_type::const_reference    const_reference;
        typedef /*implementation-defined*/                  size_type;
        typedef /*implementation-defined*/                  difference_type;
        typedef /*implementation-defined*/                  iterator;
        typedef /*implementation-defined*/                  const_iterator;
        typedef /*implementation-defined*/                  local_iterator;
        typedef /*implementation-defined*/                  const_local_iterator;

        // construct/destroy/copy
        explicit unordered_map(size_type n = see below,
                               const hasher& hf = hasher(),
                               const key_equal& eql = key_equal(),
                               const allocator_type& a = allocator_type());
        template <class InputIterator>
        unordered_map(InputIterator f, InputIterator l,
                      size_type n = see below,
                      const hasher& hf = hasher(),
                      const key_equal& eql = key_equal(),
                      const allocator_type& a = allocator_type());
        unordered_map(const unordered_map&);
        unordered_map(unordered_map&&);
        explicit unordered_map(const Allocator&);
        unordered_map(const unordered_map&, const Allocator&);
        unordered_map(unordered_map&&, const Allocator&);
        unordered_map(initializer_list<value_type>,
                      size_type = see below,
                      const hasher& hf = hasher(),
                      const key_equal& eql = key_equal(),
                      const allocator_type& a = allocator_type());
        ~unordered_map();
        unordered_map& operator=(const unordered_map&);
        unordered_map& operator=(unordered_map&&);
        unordered_map& operator=(initializer_list<value_type>);
        allocator_type get_allocator() const noexcept;

        // size and capacity
        bool empty() const noexcept;
        size_type size() const noexcept;
        size_type max_size() const noexcept;

        // iterators
        iterator       begin() noexcept;
        const_iterator begin() const noexcept;
        iterator       end() noexcept;
        const_iterator end() const noexcept;
        const_iterator cbegin() const noexcept;
        const_iterator cend() const noexcept;

        // modifiers
        template <class... Args> pair<iterator, bool> emplace(Args&&... args);
        template <class... Args> iterator emplace_hint(const_iterator position, Args&&... args);
        pair<iterator, bool> insert(const value_type& obj);
        template <class P> pair<iterator, bool> insert(P&& obj);
        iterator insert(const_iterator hint, const value_type& obj);
        template <class P> iterator insert(const_iterator hint, P&& obj);
        template <class InputIterator> void insert(InputIterator first, InputIterator last);
        void insert(initializer_list<value_type>);

        iterator erase(const_iterator position);
        size_type erase(const key_type& k);
        iterator erase(const_iterator first, const_iterator last);
        void clear() noexcept;

        void swap(unordered_map&);

        // observers
        hasher hash_function() const;
        key_equal key_eq() const;

        // lookup
        iterator find(const key_type& k);
        const_iterator find(const key_type& k) const;
        size_type count(const key_type& k) const;
        std::pair<iterator, iterator>
        equal_range(const key_type& k);
        std::pair<const_iterator, const_iterator> equal_range(const key_type& k) const;
        mapped_type& operator[](const key_type& k);
        mapped_type& operator[](key_type&& k);
        mapped_type& at(const key_type& k);
        const mapped_type& at(const key_type& k) const;

        // bucket interface
        size_type bucket_count() const noexcept;
        size_type max_bucket_count() const noexcept;
        size_type bucket_size(size_type n) const;
        size_type bucket(const key_type& k) const;
        local_iterator begin(size_type n);
        const_local_iterator begin(size_type n) const;
        local_iterator end(size_type n);
        const_local_iterator end(size_type n) const;
        const_local_iterator cbegin(size_type n) const;
        const_local_iterator cend(size_type n) const;
        // hash policy
        float load_factor() const noexcept;
        float max_load_factor() const noexcept;
        void max_load_factor(float z);
        void rehash(size_type n);
        void reserve(size_type n);
    };

#### [edit] Class std::unordered_multimap

    template <class Key,
    class T,
    class Hash = hash<Key>,
    class Pred = std::equal_to<Key>,
    class Allocator = std::allocator<std::pair<const Key, T> > >
    class unordered_multimap
    {
    public:
        // types
        typedef Key                                         key_type;
        typedef Key                                         value_type;
        typedef Hash                                        hasher;
        typedef Pred                                        key_equal;
        typedef Allocator                                   allocator_type;
        typedef typename allocator_type::pointer            pointer;
        typedef typename allocator_type::const_pointer      const_pointer;
        typedef typename allocator_type::reference          reference;
        typedef typename allocator_type::const_reference    const_reference;
        typedef /*implementation-defined*/                  size_type;
        typedef /*implementation-defined*/                  difference_type;
        typedef /*implementation-defined*/                  iterator;
        typedef /*implementation-defined*/                  const_iterator;
        typedef /*implementation-defined*/                  local_iterator;
        typedef /*implementation-defined*/                  const_local_iterator;

        // construct/destroy/copy
        explicit unordered_multimap(size_type n = see below,
                                    const hasher& hf = hasher(),
                                    const key_equal& eql = key_equal(),
                                    const allocator_type& a = allocator_type());
        template <class InputIterator>
        unordered_multimap(InputIterator f, InputIterator l,
                           size_type n = see below,
                           const hasher& hf = hasher(),
                           const key_equal& eql = key_equal(),
                           const allocator_type& a = allocator_type());
        unordered_multimap(const unordered_multimap&);
        unordered_multimap(unordered_multimap&&);
        explicit unordered_multimap(const Allocator&);
        unordered_multimap(const unordered_multimap&, const Allocator&);
        unordered_multimap(unordered_multimap&&, const Allocator&);
        unordered_multimap(initializer_list<value_type>,
                           size_type = see below,
                           const hasher& hf = hasher(),
                           const key_equal& eql = key_equal(),
                           const allocator_type& a = allocator_type());
        ~unordered_multimap();
        unordered_multimap& operator=(const unordered_multimap&);
        unordered_multimap& operator=(unordered_multimap&&);
        unordered_multimap& operator=(initializer_list<value_type>);
        allocator_type get_allocator() const noexcept;

        // size and capacity
        bool empty() const noexcept;
        size_type size() const noexcept;
        size_type max_size() const noexcept;

        // iterators
        iterator       begin() noexcept;
        const_iterator begin() const noexcept;
        iterator       end() noexcept;
        const_iterator end() const noexcept;
        const_iterator cbegin() const noexcept;
        const_iterator cend() const noexcept;

        // modifiers
        template <class... Args> iterator emplace(Args&&... args);
        template <class... Args> iterator emplace_hint(const_iterator position, Args&&... args);
        iterator insert(const value_type& obj);
        template <class P> iterator insert(P&& obj);
        iterator insert(const_iterator hint, const value_type& obj);
        template <class P> iterator insert(const_iterator hint, P&& obj);
        template <class InputIterator> void insert(InputIterator first, InputIterator last);
        void insert(initializer_list<value_type>);

        iterator erase(const_iterator position);
        size_type erase(const key_type& k);
        iterator erase(const_iterator first, const_iterator last);
        void clear() noexcept;

        void swap(unordered_multimap&);

        // observers
        hasher hash_function() const;
        key_equal key_eq() const;

        // lookup
        iterator find(const key_type& k);
        const_iterator find(const key_type& k) const;
        size_type count(const key_type& k) const;
        std::pair<iterator, iterator>
        equal_range(const key_type& k);
        std::pair<const_iterator, const_iterator> equal_range(const key_type& k) const;

        // bucket interface
        size_type bucket_count() const noexcept;
        size_type max_bucket_count() const noexcept;
        size_type bucket_size(size_type n) const;
        size_type bucket(const key_type& k) const;
        local_iterator begin(size_type n);
        const_local_iterator begin(size_type n) const;
        local_iterator end(size_type n);
        const_local_iterator end(size_type n) const;
        const_local_iterator cbegin(size_type n) const;
        const_local_iterator cend(size_type n) const;
        // hash policy
        float load_factor() const noexcept;
        float max_load_factor() const noexcept;
        void max_load_factor(float z);
        void rehash(size_type n);
        void reserve(size_type n);
    };

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/header/unordered_map&oldid=57545"