C++ 参考手册

位置:首页 > C++ 参考手册 >C++ 标准库头文件 > 标准库头文件 <unordered_set>

此头文件是容器库的一部分。

包含

<initializer_list> (C++11)

(C++11 起)
唯一键的集合,按照键生成散列
(类模板)
键的集合,按照键生成散列
(类模板)

函数

(C++20 中移除)
比较 unordered_set 中的值
(函数模板)
特化 std::swap 算法
(函数模板)
(C++20 中移除)
比较 unordered_multiset 中的值
(函数模板)
特化 std::swap 算法
(函数模板)

概要

#include <initializer_list>
 
namespace std {
    // 类模板 unordered_set:
    template <class Key,
            class Hash = hash<Key>,
            class Pred = std::equal_to<Key>,
            class Alloc = std::allocator<Key> >
        class unordered_set;
 
    // 类模板 unordered_multiset:
    template <class Key,
            class Hash = hash<Key>,
            class Pred = std::equal_to<Key>,
            class Alloc = std::allocator<Key> >
        class unordered_multiset;
 
    template <class Key, class Hash, class Pred, class Alloc>
        void swap(unordered_set<Key, Hash, Pred, Alloc>& x,
                unordered_set<Key, Hash, Pred, Alloc>& y);
    template <class Key, class Hash, class Pred, class Alloc>
        void swap(unordered_multiset<Key, Hash, Pred, Alloc>& x,
                unordered_multiset<Key, Hash, Pred, Alloc>& y);
 
    template <class Key, class Hash, class Pred, class Alloc>
        bool operator==(const unordered_set<Key, Hash, Pred, Alloc>& a,
                        const unordered_set<Key, Hash, Pred, Alloc>& b);
    template <class Key, class Hash, class Pred, class Alloc>
        bool operator!=(const unordered_set<Key, Hash, Pred, Alloc>& a,
                        const unordered_set<Key, Hash, Pred, Alloc>& b);
    template <class Key, class Hash, class Pred, class Alloc>
        bool operator==(const unordered_multiset<Key, Hash, Pred, Alloc>& a,
                        const unordered_multiset<Key, Hash, Pred, Alloc>& b);
    template <class Key, class Hash, class Pred, class Alloc>
        bool operator!=(const unordered_multiset<Key, Hash, Pred, Alloc>& a,
                        const unordered_multiset<Key, Hash, Pred, Alloc>& b);
} // namespace std


std::unordered_set

template <class Key,
    class Hash = hash<Key>,
    class Pred = std::equal_to<Key>,
    class Allocator = std::allocator<Key> >
class unordered_set
{
public:
    // 类型
    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 /* 由实现定义 */                             size_type;
    typedef /* 由实现定义 */                             difference_type;
 
    typedef /* 由实现定义 */                             iterator;
    typedef /* 由实现定义 */                             const_iterator;
    typedef /* 由实现定义 */                             local_iterator;
    typedef /* 由实现定义 */                             const_local_iterator;
 
    // 构造/销毁/复制
    explicit unordered_set(size_type n = implementation-defined,
                           const hasher& hf = hasher(),
                           const key_equal& eql = key_equal(),
                           const allocator_type& a = allocator_type());
    template <class InputIterator>
    unordered_set(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_set(const unordered_set&);
    unordered_set(unordered_set&&);
    explicit unordered_set(const Allocator&);
    unordered_set(const unordered_set&, const Allocator&);
    unordered_set(unordered_set&&, const Allocator&);
    unordered_set(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_set();
    unordered_set& operator=(const unordered_set&);
    unordered_set& operator=(unordered_set&&);
    unordered_set& operator=(initializer_list<value_type>);
    allocator_type get_allocator() const noexcept;
 
    // 大小与容量
    bool      empty() const noexcept;
    size_type size() const noexcept;
    size_type max_size() const noexcept;
 
    // 迭代器
    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;
 
    // 修改器
    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);
    pair<iterator, bool> insert(value_type&& obj);
    iterator insert(const_iterator hint, const value_type& obj);
    iterator insert(const_iterator hint, value_type&& 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_set&);
 
    // 观察器
    hasher hash_function() const;
    key_equal key_eq() const;
 
    // 查找
    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;
 
    // 桶接口
    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;
 
    // 散列策略
    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);
};


std::unordered_multiset

template <class Key,
    class Hash = hash<Key>,
    class Pred = std::equal_to<Key>,
    class Allocator = std::allocator<Key> >
class unordered_multiset
{
public:
    // 类型
    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 /* 由实现定义 */                             size_type;
    typedef /* 由实现定义 */                             difference_type;
    typedef /* 由实现定义 */                             iterator;
    typedef /* 由实现定义 */                             const_iterator;
    typedef /* 由实现定义 */                             local_iterator;
    typedef /* 由实现定义 */                             const_local_iterator;
 
    // 构造/销毁/复制
    explicit unordered_multiset(size_type n = /* 由实现定义 */,
                                const hasher& hf = hasher(),
                                const key_equal& eql = key_equal(),
                                const allocator_type& a = allocator_type());
    template <class InputIterator>
    unordered_multiset(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_multiset(const unordered_multiset&);
    unordered_multiset(unordered_multiset&&);
    explicit unordered_multiset(const Allocator&);
    unordered_multiset(const unordered_multiset&, const Allocator&);
    unordered_multiset(unordered_multiset&&, const Allocator&);
    unordered_multiset(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_multiset();
    unordered_multiset& operator=(const unordered_multiset&);
    unordered_multiset operator=(unordered_multiset&&);
    unordered_multiset& operator=(initializer_list<value_type>);
    allocator_type get_allocator() const noexcept;
 
    // 大小与容量
    bool empty() const noexcept;
    size_type size() const noexcept;
    size_type max_size() const noexcept;
 
    // 迭代器
    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;
 
    // 修改器
    template <class... Args> iterator emplace(Args&&... args);
    template <class... Args> iterator emplace_hint(const_iterator position, Args&&... args);
    iterator insert(const value_type& obj);
    iterator insert(value_type&& obj);
    iterator insert(const_iterator hint, const value_type& obj);
    iterator insert(const_iterator hint, value_type&& 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_multiset&);
 
    // 观察器
    hasher hash_function() const;
    key_equal key_eq() const;
 
    // 查找
    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;
 
    // 桶接口
    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;
 
    // 散列策略
    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);
};