C++11

当前头文件是容器库(Containers library)的部分内容。

容器库(参考手册) ​容器库(标准)

  • unordered_map unordered_map 类模板
    unordered_multimap unordered_multimap 类模板
  • operator==、operator!=、operator<、operator<=、operator>、operator>= 关系操作符,比较 unordered_map 中的值
    std::swap(std::unordered_map) 交换两个无序映射表的内容
    operator==、operator!=、operator<、operator<=、operator>、operator>= 关系操作符,比较 unordered_multimap 中的值
    std::swap(std::unordered_multimap) 交换两个无序多键映射表的内容
  • #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
  • 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);
    };
  • 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);
    };