Chinese (Simplified Han script) (Boost Unordered - en to zh_Hans translation catalogue (254 entries)

en: Class Template unordered_flat_set
zh_Hans: 类模板 unordered_flat_set

en: `boost::unordered_flat_set` — An open-addressing unordered associative container that stores unique values.
zh_Hans: `boost::unordered_flat_set` — 一种开放定址无序关联容器，用于存储唯一值。

en: The performance of `boost::unordered_flat_set` is much better than that of `boost::unordered_set` or other implementations of `std::unordered_set`. Unlike standard unordered associative containers, which are node-based, the elements of a `boost::unordered_flat_set` are held directly in the bucket array, and insertions into an already occupied bucket are diverted to available buckets in the vicinity of the original position. This type of data layout is known as _open addressing_.
zh_Hans: `boost::unordered_flat_set` 的性能远优于 `boost::unordered_set` 或 `std::unordered_set` 的其他实现。与基于节点的标准无序关联容器不同，`boost::unordered_flat_set` 的元素直接保存在桶数组中，当插入位置已被占用时，会转移到原始位置附近可用的桶中。这种数据布局称为**开放定址**。

en: As a result of its using open addressing, the interface of `boost::unordered_flat_set` deviates in a number of aspects from that of `boost::unordered_flat_set`/`std::unordered_flat_set`:
zh_Hans: 由于采用开放定址，`boost::unordered_flat_set` 的接口在多个方面与 `boost::unordered_set`/`std::unordered_set` 存在差异：

en: - `value_type` must be move-constructible. - Pointer stability is not kept under rehashing. - `begin()` is not constant-time. - There is no API for bucket handling (except `bucket_count`) or node extraction/insertion. - The maximum load factor of the container is managed internally and can't be set by the user.
zh_Hans: - `value_type` 必须可移动构造。
    - 在重哈希过程中不保持指针稳定性。
    - `begin()` 不是常数时间操作。
    - 没有用于桶操作的 API（除了 `bucket_count`），也没有节点提取/插入的 API。
    - 容器的最大负载因子由内部管理，用户无法设置。

en: Other than this, `boost::unordered_flat_set` is mostly a drop-in replacement of node-based standard unordered associative containers.
zh_Hans: 除此之外，`boost::unordered_flat_set` 基本上是基于节点的标准无序关联容器的直接替代品。

en: Synopsis
zh_Hans: 概要

en: Description
zh_Hans: 描述

en: *Template Parameters*
zh_Hans: *模板参数*

en: _Key_
zh_Hans: _键_

en: `Key` must be https://en.cppreference.com/w/cpp/named_req/MoveInsertable[MoveInsertable^] into the container
zh_Hans: `Key` 必须可以 https://en.cppreference.com/w/cpp/named_req/MoveInsertable[MoveInsertable^] 到容器中

en: and https://en.cppreference.com/w/cpp/named_req/Erasable[Erasable^] from the container.
zh_Hans: 并且可以从容器中 https://en.cppreference.com/w/cpp/named_req/Erasable[Erasable^]。

en: A unary function object type that acts a hash function for a `Key`. It takes a single argument of type `Key` and returns a value of type `std::size_t`.
zh_Hans: 一种一元函数对象类型，用作 `Key` 的哈希函数。它接受一个 `Key` 类型的参数，并返回一个 `std::size_t` 类型的值。

en: A binary function object that induces an equivalence relation on values of type `Key`. It takes two arguments of type `Key` and returns a value of type `bool`.
zh_Hans: 一种二元函数对象，用于在 `Key` 类型的值上建立等价关系。它接受两个 `Key` 类型的参数，并返回一个 `bool` 类型的值。

en: An allocator whose value type is the same as the container's value type.
zh_Hans: 一种分配器，其值类型与容器的值类型相同。

en: Allocators using https://en.cppreference.com/w/cpp/named_req/Allocator#Fancy_pointers[fancy pointers] are supported.
zh_Hans: 支持使用https://en.cppreference.com/w/cpp/named_req/Allocator#Fancy_pointers[fancy pointers] 的分配器。

en: The elements of the container are held into an internal _bucket array_. An element is inserted into a bucket determined by its hash code, but if the bucket is already occupied (a _collision_), an available one in the vicinity of the original position is used.
zh_Hans: 容器的元素保存在内部的**桶数组**中。元素根据其哈希码被插入到对应的桶中，但如果该桶已被占用（发生**冲突**），则会使用原始位置附近的一个可用桶。

en: The size of the bucket array can be automatically increased by a call to `insert`/`emplace`, or as a result of calling `rehash`/`reserve`. The _load factor_ of the container (number of elements divided by number of buckets) is never greater than `max_load_factor()`, except possibly for small sizes where the implementation may decide to allow for higher loads.
zh_Hans: 桶数组的大小可以通过调用 `insert`/`emplace` 自动增加，或者作为调用 `rehash`/`reserve` 的结果而增加。容器的**负载因子**（元素个数除以桶数量）永远不会大于 `max_load_factor()`，但在容量较小的情况下，实现可能会允许更高的负载。

en: If `link:../../../../../container_hash/doc/html/hash.html#ref_hash_is_avalanchinghash[hash_is_avalanching]<Hash>::value` is `true`, the hash function is used as-is; otherwise, a bit-mixing post-processing stage is added to increase the quality of hashing at the expense of extra computational cost.
zh_Hans: 如果`link:../../../../../container_hash/doc/html/hash.html#ref_hash_is_avalanching[hash_is_avalanching]<hash>::value` 为 `true`，则哈希函数将按原样使用；否则，将添加一个比特混合后处理阶段，以增加哈希质量，但会增加额外的计算成本。</hash>

en: Configuration Macros
zh_Hans: 配置宏

en: Globally define this macro to enable xref:reference/stats.adoc#stats[statistics calculation] for the container. Note that this option decreases the overall performance of many operations.
zh_Hans: 全局定义此宏以启用容器的 xref:reference/stats.adoc#stats[统计信息计算]。请注意，此选项会降低许多操作的整体性能。

en: Typedefs
zh_Hans: 类型定义

[ctx: :291]
en: A constant iterator whose value type is `value_type`.
zh_Hans: 一种常量迭代器，其值类型为 `value_type`。

[ctx: :293]
en: The iterator category is at least a forward iterator.
zh_Hans: 迭代器类别至少为前向迭代器。

en: Convertible to `const_iterator`.
zh_Hans: 可转换为 `const_iterator`。

[ctx: :304]
en: A constant iterator whose value type is `value_type`.
zh_Hans: 一种常量迭代器，其值类型为 `value_type`。

[ctx: :306]
en: The iterator category is at least a forward iterator.
zh_Hans: 迭代器类别至少为前向迭代器。

en: Constructors
zh_Hans: 构造函数

en: Default Constructor
zh_Hans: 默认构造函数

en: Constructs an empty container using `hasher()` as the hash function, `key_equal()` as the key equality predicate and `allocator_type()` as the allocator.
zh_Hans: 使用 `hasher()` 作为哈希函数、`key_equal()` 作为键相等谓词以及 `allocator_type()` 作为分配器，构造一个空容器。

[ctx: :319]
en: Postconditions:;; `size() == 0` Requires:;; If the defaults are used, `hasher`, `key_equal` and `allocator_type` need to be https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^].
zh_Hans: 后置条件：;; `size() == 0`
    要求：;; 如果使用默认值，则 `hasher`、`key_equal` 和 `allocator_type` 需要是 https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]。

en: Bucket Count Constructor
zh_Hans: 桶数构造函数

en: ```c++ explicit unordered_flat_set(size_type n, const hasher& hf = hasher(), const key_equal& eql = key_equal(), const allocator_type& a = allocator_type()); ```
zh_Hans: ```c++ explicit unordered_flat_set(size_type n, const hasher&amp; hf = hasher(), const key_equal&amp; eql = key_equal(), const allocator_type&amp; a = allocator_type()); ```

en: Constructs an empty container with at least `n` buckets, using `hf` as the hash function, `eql` as the key equality predicate, and `a` as the allocator.
zh_Hans: 构造一个至少包含 `n` 个桶的空容器，使用 `hf` 作为哈希函数，`eql` 作为键相等谓词，`a` 作为分配器。

[ctx: :336]
en: Postconditions:;; `size() == 0` Requires:;; If the defaults are used, `hasher`, `key_equal` and `allocator_type` need to be https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^].
zh_Hans: 后置条件：;; `size() == 0`
    要求：;; 如果使用默认值，则 `hasher`、`key_equal` 和 `allocator_type` 需要是 https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]。

en: Iterator Range Constructor
zh_Hans: 迭代器范围构造函数

en: Constructs an empty container with at least `n` buckets, using `hf` as the hash function, `eql` as the key equality predicate and `a` as the allocator, and inserts the elements from `[f, l)` into it.
zh_Hans: 构造一个至少包含 `n` 个桶的空容器，使用 `hf` 作为哈希函数，`eql` 作为键相等谓词，`a` 作为分配器，并将 `[f, l)` 范围内的元素插入其中。

[ctx: :355]
en: Requires:;; If the defaults are used, `hasher`, `key_equal` and `allocator_type` need to be https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^].
zh_Hans: 要求：;; 如果使用默认值，则 `hasher`、`key_equal` 和 `allocator_type` 需要是 https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]。

en: Copy Constructor
zh_Hans: 复制构造函数

en: ```c++ unordered_flat_set(unordered_flat_set const& other); ```
zh_Hans: ```c++ unordered_flat_set(unordered_flat_set const&amp; other); ```

en: The copy constructor. Copies the contained elements, hash function, predicate and allocator.
zh_Hans: 复制构造函数。复制所包含的元素、哈希函数、谓词和分配器。

en: If `Allocator::select_on_container_copy_construction` exists and has the right signature, the allocator will be constructed from its result.
zh_Hans: 如果 `Allocator::select_on_container_copy_construction` 存在且具有正确的签名，则分配器将根据其结果进行构造。

en: Requires:;; `value_type` is copy constructible
zh_Hans: 要求：;; `value_type` 可复制构造。

en: Move Constructor
zh_Hans: 移动构造函数

en: ```c++ unordered_flat_set(unordered_flat_set&& other); ```
zh_Hans: ```c++ unordered_flat_set(unordered_flat_set&amp;&amp; other); ```

en: The move constructor. The internal bucket array of `other` is transferred directly to the new container. The hash function, predicate and allocator are moved-constructed from `other`. If statistics are xref:unordered_flat_set_boost_unordered_enable_stats[enabled], transfers the internal statistical information from `other` and calls `other.reset_stats()`.
zh_Hans: 移动构造函数。`other` 的内部桶数组将直接转移给新容器。哈希函数、谓词和分配器从 `other` 进行移动构造。如果启用了统计信息（xref:unordered_flat_set_boost_unordered_enable_stats[enabled]），则从 `other` 转移内部统计信息，并调用 `other.reset_stats()`。

en: Iterator Range Constructor with Allocator
zh_Hans: 带分配器的迭代器区间构造函数

en: ```c++ template<class InputIterator> unordered_flat_set(InputIterator f, InputIterator l, const allocator_type& a); ```
zh_Hans: ```c++ template<class inputiterator=""> unordered_flat_set(InputIterator f, InputIterator l, const allocator_type&amp; a); ```</class>

en: Constructs an empty container using `a` as the allocator, with the default hash function and key equality predicate and inserts the elements from `[f, l)` into it.
zh_Hans: 构造一个以 `a` 为分配器的空容器，使用默认的哈希函数和键相等谓词，并将 `[f, l)` 范围内的元素插入其中。

[ctx: :394]
en: Requires:;; `hasher`, `key_equal` need to be https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^].
zh_Hans: 要求：;; `hasher` 和 `key_equal` 需要是 https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]。

en: Allocator Constructor
zh_Hans: 分配器构造函数

en: ```c++ explicit unordered_flat_set(Allocator const& a); ```
zh_Hans: ```c++ explicit unordered_flat_set(Allocator const&amp; a); ```

en: Constructs an empty container, using allocator `a`.
zh_Hans: 构造一个空容器，使用分配器 `a`。

en: Copy Constructor with Allocator
zh_Hans: 带分配器的复制构造函数

en: ```c++ unordered_flat_set(unordered_flat_set const& other, Allocator const& a); ```
zh_Hans: ```c++ unordered_flat_set(unordered_flat_set const&amp; other, Allocator const&amp; a); ```

en: Constructs a container, copying ``other``'s contained elements, hash function, and predicate, but using allocator `a`.
zh_Hans: 构造一个容器，复制 `other` 所包含的元素、哈希函数和谓词，但使用分配器 `a`。

en: Move Constructor with Allocator
zh_Hans: 带分配器的移动构造函数

en: ```c++ unordered_flat_set(unordered_flat_set&& other, Allocator const& a); ```
zh_Hans: ```c++ unordered_flat_set(unordered_flat_set&amp;&amp; other, Allocator const&amp; a); ```

en: If `a == other.get_allocator()`, the elements of `other` are transferred directly to the new container; otherwise, elements are moved-constructed from those of `other`. The hash function and predicate are moved-constructed from `other`, and the allocator is copy-constructed from `a`. If statistics are xref:unordered_flat_set_boost_unordered_enable_stats[enabled], transfers the internal statistical information from `other` iff `a == other.get_allocator()`, and always calls `other.reset_stats()`.
zh_Hans: 如果 `a == other.get_allocator()`，则 `other` 的元素会直接转移给新容器；否则，将根据 `other` 中的元素进行移动构造。哈希函数和谓词从 `other` 进行移动构造，而分配器则从 `a` 进行复制构造。如果启用了统计信息（xref:unordered_flat_set_boost_unordered_enable_stats[enabled]），则仅当 `a == other.get_allocator()` 时才从 `other` 转移内部统计信息，并且总是调用 `other.reset_stats()`。

en: Move Constructor from concurrent_flat_set
zh_Hans: 从 concurrent_flat_set 移动构造

en: ```c++ unordered_flat_set(concurrent_flat_set<Key, Hash, Pred, Allocator>&& other); ```
zh_Hans: ```c++ unordered_flat_set(concurrent_flat_set<key, hash,="" pred,="" allocator="">&amp;&amp; other); ```</key,>

en: Move construction from a xref:#concurrent_flat_set[`concurrent_flat_set`]. The internal bucket array of `other` is transferred directly to the new container. The hash function, predicate and allocator are moved-constructed from `other`. If statistics are xref:unordered_flat_set_boost_unordered_enable_stats[enabled], transfers the internal statistical information from `other` and calls `other.reset_stats()`.
zh_Hans: 从 xref:#concurrent_flat_set[`concurrent_flat_set`] 进行移动构造。`other` 的内部桶数组将直接转移给新容器。哈希函数、谓词和分配器从 `other` 进行移动构造。如果启用了统计信息（xref:unordered_flat_set_boost_unordered_enable_stats[enabled]），则从 `other` 转移内部统计信息，并调用 `other.reset_stats()`。

en: Complexity:;; Constant time. Concurrency:;; Blocking on `other`.
zh_Hans: 复杂度：;; 常数时间。
    并发性：;; 在 `other` 上阻塞。

en: Initializer List Constructor
zh_Hans: 初始化列表构造函数

en: Constructs an empty container with at least `n` buckets, using `hf` as the hash function, `eql` as the key equality predicate and `a`, and inserts the elements from `il` into it.
zh_Hans: 构造一个至少包含 `n` 个桶的空容器，使用 `hf` 作为哈希函数，`eql` 作为键相等谓词，`a` 作为分配器，并将 `il` 中的元素插入其中。

[ctx: :461]
en: Requires:;; If the defaults are used, `hasher`, `key_equal` and `allocator_type` need to be https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^].
zh_Hans: 要求：;; 如果使用默认值，则 `hasher`、`key_equal` 和 `allocator_type` 需要是 https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]。

en: Bucket Count Constructor with Allocator
zh_Hans: 带分配器的桶数构造函数

en: ```c++ unordered_flat_set(size_type n, allocator_type const& a); ```
zh_Hans: ```c++ unordered_flat_set(size_type n, allocator_type const&amp; a); ```

en: Constructs an empty container with at least `n` buckets, using `hf` as the hash function, the default hash function and key equality predicate and `a` as the allocator.
zh_Hans: 构造一个至少包含 `n` 个桶的空容器，使用 `hf` 作为哈希函数，默认的哈希函数和键相等谓词，并以 `a` 作为分配器。

en: Postconditions:;; `size() == 0` Requires:;; `hasher` and `key_equal` need to be https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^].
zh_Hans: 后置条件：;; `size() == 0`
    要求：;; `hasher` 和 `key_equal` 需要是 https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]。

en: Bucket Count Constructor with Hasher and Allocator
zh_Hans: 带哈希函数和分配器的桶数构造函数

en: ```c++ unordered_flat_set(size_type n, hasher const& hf, allocator_type const& a); ```
zh_Hans: ```c++ unordered_flat_set(size_type n, hasher const&amp; hf, allocator_type const&amp; a); ```

en: Constructs an empty container with at least `n` buckets, using `hf` as the hash function, the default key equality predicate and `a` as the allocator.
zh_Hans: 构造一个至少包含 `n` 个桶的空容器，使用 `hf` 作为哈希函数，默认的键相等谓词，并以 `a` 作为分配器。

en: Postconditions:;; `size() == 0` Requires:;; `key_equal` needs to be https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^].
zh_Hans: 后置条件：;; `size() == 0`
    要求：;; `key_equal` 需要是 https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]。

en: Iterator Range Constructor with Bucket Count and Allocator
zh_Hans: 带桶数和分配器的迭代器范围构造函数

en: Constructs an empty container with at least `n` buckets, using `a` as the allocator and default hash function and key equality predicate, and inserts the elements from `[f, l)` into it.
zh_Hans: 构造一个至少包含 `n` 个桶的空容器，使用 `a` 作为分配器以及默认的哈希函数和键相等谓词，并将 `[f, l)` 范围内的元素插入其中。

[ctx: :501]
en: Requires:;; `hasher`, `key_equal` need to be https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^].
zh_Hans: 要求：;; `hasher` 和 `key_equal` 需要是 https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]。

en: Iterator Range Constructor with Bucket Count and Hasher
zh_Hans: 带桶数和哈希函数的迭代器范围构造函数

en: Constructs an empty container with at least `n` buckets, using `hf` as the hash function, `a` as the allocator, with the default key equality predicate, and inserts the elements from `[f, l)` into it.
zh_Hans: 构造一个至少包含 `n` 个桶的空容器，使用 `hf` 作为哈希函数，`a` 作为分配器，并使用默认的键相等谓词，然后将 `[f, l)` 范围内的元素插入其中。

[ctx: :516]
en: Requires:;; `key_equal` needs to be https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^].
zh_Hans: 要求：;; `key_equal` 需要是 https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]。

en: initializer_list Constructor with Allocator
zh_Hans: 带分配器的初始化列表构造函数

en: ```c++ unordered_flat_set(std::initializer_list<value_type> il, const allocator_type& a); ```
zh_Hans: ```c++ unordered_flat_set(std::initializer_list<value_type> il, const allocator_type&amp; a); ```</value_type>

en: Constructs an empty container using `a` and default hash function and key equality predicate, and inserts the elements from `il` into it.
zh_Hans: 使用 `a` 以及默认的哈希函数和键相等谓词构造一个空容器，并将 `il` 中的元素插入其中。

[ctx: :529]
en: Requires:;; `hasher` and `key_equal` need to be https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^].
zh_Hans: 要求：;; `hasher` 和 `key_equal` 需要是 https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]。

en: initializer_list Constructor with Bucket Count and Allocator
zh_Hans: 带桶数和分配器的初始化列表构造函数

en: ```c++ unordered_flat_set(std::initializer_list<value_type> il, size_type n, const allocator_type& a); ```
zh_Hans: ```c++ unordered_flat_set(std::initializer_list<value_type> il, size_type n, const allocator_type&amp; a); ```</value_type>

en: Constructs an empty container with at least `n` buckets, using `a` and default hash function and key equality predicate, and inserts the elements from `il` into it.
zh_Hans: 构造一个至少包含 `n` 个桶的空容器，使用 `a` 以及默认的哈希函数和键相等谓词，并将 `il` 中的元素插入其中。

[ctx: :542]
en: Requires:;; `hasher` and `key_equal` need to be https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^].
zh_Hans: 要求：;; `hasher` 和 `key_equal` 需要是 https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]。

en: initializer_list Constructor with Bucket Count and Hasher and Allocator
zh_Hans: 带桶数、哈希函数和分配器的初始化列表构造函数

en: ```c++ unordered_flat_set(std::initializer_list<value_type> il, size_type n, const hasher& hf, const allocator_type& a); ```
zh_Hans: ```c++ unordered_flat_set(std::initializer_list<value_type> il, size_type n, const hasher&amp; hf, const allocator_type&amp; a); ```</value_type>

en: Constructs an empty container with at least `n` buckets, using `hf` as the hash function, `a` as the allocator and default key equality predicate,and inserts the elements from `il` into it.
zh_Hans: 构造一个至少包含 `n` 个桶的空容器，使用 `hf` 作为哈希函数，`a` 作为分配器，以及默认的键相等谓词，并将 `il` 中的元素插入其中。

[ctx: :556]
en: Requires:;; `key_equal` needs to be https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^].
zh_Hans: 要求：;; `key_equal` 需要是 https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]。

en: Destructor
zh_Hans: 析构函数

en: Note:;; The destructor is applied to every element, and all memory is deallocated
zh_Hans: 注意：;; 析构函数会应用于每个元素，并且所有内存都会被释放。

en: Assignment
zh_Hans: 赋值操作

en: Copy Assignment
zh_Hans: 复制赋值

en: ```c++ unordered_flat_set& operator=(unordered_flat_set const& other); ```
zh_Hans: ```c++ unordered_flat_set&amp; operator=(unordered_flat_set const&amp; other); ```

en: The assignment operator. Destroys previously existing elements, copy-assigns the hash function and predicate from `other`, copy-assigns the allocator from `other` if `Alloc::propagate_on_container_copy_assignment` exists and `Alloc::propagate_on_container_copy_assignment::value` is `true`, and finally inserts copies of the elements of `other`.
zh_Hans: 赋值运算符。销毁先前存在的元素，从 `other` 复制赋值哈希函数和谓词，如果 `Alloc::propagate_on_container_copy_assignment` 存在且 `Alloc::propagate_on_container_copy_assignment::value` 为 `true`，则从 `other` 复制赋值分配器，最后插入 `other` 元素的副本。

[ctx: :584]
en: Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/CopyInsertable[CopyInsertable^]
zh_Hans: 要求：;; `value_type` 必须是 https://en.cppreference.com/w/cpp/named_req/CopyInsertable[CopyInsertable^]。

en: Move Assignment
zh_Hans: 移动赋值

en: ```c++ unordered_flat_set& operator=(unordered_flat_set&& other) noexcept((boost::allocator_traits<Allocator>::is_always_equal::value || boost::allocator_traits<Allocator>::propagate_on_container_move_assignment::value) && std::is_same<pointer, value_type*>::value); ``` The move assignment operator. Destroys previously existing elements, swaps the hash function and predicate from `other`, and move-assigns the allocator from `other` if `Alloc::propagate_on_container_move_assignment` exists and `Alloc::propagate_on_container_move_assignment::value` is `true`. If at this point the allocator is equal to `other.get_allocator()`, the internal bucket array of `other` is transferred directly to the new container; otherwise, inserts move-constructed copies of the elements of `other`. If statistics are xref:unordered_flat_set_boost_unordered_enable_stats[enabled], transfers the internal statistical information from `other` iff the final allocator is equal to `other.get_allocator()`, and always calls `other.reset_stats()`.
zh_Hans: ```c++
    unordered_flat_set&amp; operator=(unordered_flat_set&amp;&amp; other) noexcept((boost::allocator_traits<allocator>::is_always_equal::value || boost::allocator_traits<allocator>::propagate_on_container_move_assignment::value) &amp;&amp; std::is_same<pointer, value_type*="">::value);
    ```
    移动赋值运算符。销毁先前存在的元素，交换来自 `other` 的哈希函数和谓词，如果 `Alloc::propagate_on_container_move_assignment` 存在且 `Alloc::propagate_on_container_move_assignment::value` 为 `true`，则从 `other` 移动赋值分配器。如果此时分配器等于 `other.get_allocator()`，则 `other` 的内部桶数组直接转移给当前容器；否则，插入 `other` 元素的移动构造副本。如果启用了统计信息（xref:unordered_flat_set_boost_unordered_enable_stats[enabled]），则仅当最终的分配器等于 `other.get_allocator()` 时才从 `other` 转移内部统计信息，并且总是调用 `other.reset_stats()`。</pointer,></allocator></allocator>

en: Initializer List Assignment
zh_Hans: 初始化列表赋值

en: ```c++ unordered_flat_set& operator=(std::initializer_list<value_type> il); ```
zh_Hans: ```c++ unordered_flat_set&amp; operator=(std::initializer_list<value_type> il); ```</value_type>

en: Assign from values in initializer list. All previously existing elements are destroyed.
zh_Hans: 从初始化列表中的值进行赋值。所有先前存在的元素均被销毁。

[ctx: :613]
en: Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/CopyInsertable[CopyInsertable^]
zh_Hans: 要求：;; `value_type` 必须是 https://en.cppreference.com/w/cpp/named_req/CopyInsertable[CopyInsertable^]。

en: Iterators
zh_Hans: 迭代器

en: Returns:;; An iterator referring to the first element of the container, or if the container is empty the past-the-end value for the container. Complexity:;; O(`bucket_count()`)
zh_Hans: 返回：;; 指向容器第一个元素的迭代器，若容器为空，则返回容器的尾后迭代器。
    复杂度：;; O(`bucket_count()`)

en: Returns:;; An iterator which refers to the past-the-end value for the container.
zh_Hans: 返回：;; 指向容器尾后值的迭代器。

en: Returns:;; A `const_iterator` referring to the first element of the container, or if the container is empty the past-the-end value for the container. Complexity:;; O(`bucket_count()`)
zh_Hans: 返回：;; 指向容器第一个元素的常量迭代器，若容器为空，则返回容器的尾后常量迭代器。
    复杂度：;; O(`bucket_count()`)

en: Returns:;; A `const_iterator` which refers to the past-the-end value for the container.
zh_Hans: 返回：;; 指向容器尾后值的常量迭代器。

en: Size and Capacity
zh_Hans: 大小与容量

en: empty
zh_Hans: 空

en: Returns:;; `size() == 0`
zh_Hans: 返回：;; `size() == 0`

en: size
zh_Hans: 大小

en: Returns:;; `std::distance(begin(), end())`
zh_Hans: 返回：;; `std::distance(begin(), end())`

en: Returns:;; `size()` of the largest possible container.
zh_Hans: 返回：;; 可能的最大容器的 `size()`。

en: Modifiers
zh_Hans: 修改器

en: emplace
zh_Hans: 原地构造

en: ```c++ template<class... Args> std::pair<iterator, bool> emplace(Args&&... args); ```
zh_Hans: ```c++ template<class... args=""> std::pair<iterator, bool=""> emplace(Args&amp;&amp;... args); ```</iterator,></class...>

[ctx: :703]
en: Inserts an object, constructed with the arguments `args`, in the container if and only if there is no element in the container with an equivalent key.
zh_Hans: 当且仅当容器中不存在具有等价键的元素时，才插入一个使用参数 `args` 构造的对象。

[ctx: :706]
en: Requires:;; `value_type` is constructible from `args`. Returns:;; The `bool` component of the return type is `true` if an insert took place. + + If an insert took place, then the iterator points to the newly inserted element. Otherwise, it points to the element with equivalent key. Throws:;; If an exception is thrown by an operation other than a call to `hasher` the function has no effect. Notes:;; Can invalidate iterators, pointers and references, but only if the insert causes the load to be greater than the maximum load. +
zh_Hans: 要求：;; `value_type` 可以从 `args` 构造。
    返回：;; 如果进行了插入，则返回类型的 `bool` 分量为 `true`。
    如果进行了插入，则迭代器指向新插入的元素；否则，指向具有等价键的元素。
    抛出：;; 如果除调用 `hasher` 之外的操作抛出异常，则该函数无效。
    备注：;; 可能会使迭代器、指针和引用失效，但仅当插入导致负载因子大于最大负载因子时才会发生。

en: ```c++ template<class... Args> iterator emplace_hint(const_iterator position, Args&&... args); ```
zh_Hans: ```c++ template<class... args=""> iterator emplace_hint(const_iterator position, Args&amp;&amp;... args); ```</class...>

[ctx: :720]
en: Inserts an object, constructed with the arguments `args`, in the container if and only if there is no element in the container with an equivalent key.
zh_Hans: 当且仅当容器中不存在具有等价键的元素时，才插入一个使用参数 `args` 构造的对象。

en: `position` is a suggestion to where the element should be inserted. This implementation ignores it.
zh_Hans: `position` 是关于元素应该插入位置的一个提示。此实现会忽略它。

[ctx: :725]
en: Requires:;; `value_type` is constructible from `args`. Returns:;; The `bool` component of the return type is `true` if an insert took place. + + If an insert took place, then the iterator points to the newly inserted element. Otherwise, it points to the element with equivalent key. Throws:;; If an exception is thrown by an operation other than a call to `hasher` the function has no effect. Notes:;; Can invalidate iterators, pointers and references, but only if the insert causes the load to be greater than the maximum load. +
zh_Hans: 要求：;; `value_type` 可以从 `args` 构造。
    返回：;; 如果进行了插入，则返回类型的 `bool` 分量为 `true`。
    如果进行了插入，则迭代器指向新插入的元素；否则，指向具有等价键的元素。
    抛出：;; 如果除调用 `hasher` 之外的操作抛出异常，则该函数无效。
    备注：;; 可能会使迭代器、指针和引用失效，但仅当插入导致负载大于最大负载时才会发生。

en: Copy Insert
zh_Hans: 复制插入

en: ```c++ std::pair<iterator, bool> insert(const value_type& obj); ```
zh_Hans: ```c++ std::pair<iterator, bool=""> insert(const value_type&amp; obj); ```</iterator,>

[ctx: :739]
en: Inserts `obj` in the container if and only if there is no element in the container with an equivalent key.
zh_Hans: 当且仅当容器中不存在具有等价键的元素时，才将 `obj` 插入容器中。

[ctx: :742]
en: Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/CopyInsertable[CopyInsertable^]. Returns:;; The `bool` component of the return type is `true` if an insert took place. + + If an insert took place, then the iterator points to the newly inserted element. Otherwise, it points to the element with equivalent key. Throws:;; If an exception is thrown by an operation other than a call to `hasher` the function has no effect. Notes:;; Can invalidate iterators, pointers and references, but only if the insert causes the load to be greater than the maximum load.
zh_Hans: 要求：;; `value_type` 必须是 https://en.cppreference.com/w/cpp/named_req/CopyInsertable[CopyInsertable^]。
    返回：;; 如果进行了插入，则返回类型的 `bool` 分量为 `true`。
    如果进行了插入，则迭代器指向新插入的元素；否则，指向具有等价键的元素。
    抛出：;; 如果除调用 `hasher` 之外的操作抛出异常，则该函数无效。
    备注：;; 可能会使迭代器、指针和引用失效，但仅当插入导致负载大于最大负载时才会发生。

en: Move Insert
zh_Hans: 移动插入

en: ```c++ std::pair<iterator, bool> insert(value_type&& obj); ```
zh_Hans: ```c++ std::pair<iterator, bool=""> insert(value_type&amp;&amp; obj); ```</iterator,>

[ctx: :756]
en: Inserts `obj` in the container if and only if there is no element in the container with an equivalent key.
zh_Hans: 当且仅当容器中不存在具有等价键的元素时，才将 `obj` 插入容器中。

[ctx: :759]
en: Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/MoveInsertable[MoveInsertable^]. Returns:;; The `bool` component of the return type is `true` if an insert took place. + + If an insert took place, then the iterator points to the newly inserted element. Otherwise, it points to the element with equivalent key. Throws:;; If an exception is thrown by an operation other than a call to `hasher` the function has no effect. Notes:;; Can invalidate iterators, pointers and references, but only if the insert causes the load to be greater than the maximum load.
zh_Hans: 要求：;; `value_type` 必须是 https://en.cppreference.com/w/cpp/named_req/MoveInsertable[MoveInsertable^]。
    返回：;; 如果进行了插入，则返回类型的 `bool` 分量为 `true`。
    如果进行了插入，则迭代器指向新插入的元素；否则，指向具有等价键的元素。
    抛出：;; 如果除调用 `hasher` 之外的操作抛出异常，则该函数无效。
    备注：;; 可能会使迭代器、指针和引用失效，但仅当插入导致负载大于最大负载时才会发生。

en: Transparent Insert
zh_Hans: 透明插入

en: ```c++ template<class K> std::pair<iterator, bool> insert(K&& k); ```
zh_Hans: ```c++ template<class k=""> std::pair<iterator, bool=""> insert(K&amp;&amp; k); ```</iterator,></class>

[ctx: :773]
en: Inserts an element constructed from `std::forward<K>(k)` in the container if and only if there is no element in the container with an equivalent key.
zh_Hans: 当且仅当容器中不存在具有等价键的元素时，才插入一个从 `std::forward<k>(k)` 构造的元素。</k>

[ctx: :776]
en: Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/EmplaceConstructible[EmplaceConstructible^] from `k`. Returns:;; The bool component of the return type is true if an insert took place. + + If an insert took place, then the iterator points to the newly inserted element. Otherwise, it points to the element with equivalent key. Throws:;; If an exception is thrown by an operation other than a call to `hasher` the function has no effect. Notes:;; Can invalidate iterators, pointers and references, but only if the insert causes the load to be greater than the maximum load. + + This overload only participates in overload resolution if `Hash::is_transparent` and `Pred::is_transparent` are valid member typedefs and neither `iterator` nor `const_iterator` are implicitly convertible from `K`. The library assumes that `Hash` is callable with both `K` and `Key` and that `Pred` is transparent. This enables heterogeneous lookup which avoids the cost of instantiating an instance of the `Key` type.
zh_Hans: 要求：;; `value_type` 可以从 `k` 进行 https://en.cppreference.com/w/cpp/named_req/EmplaceConstructible[EmplaceConstructible^]。
    返回：;; 如果进行了插入，则返回类型的 bool 分量为 true。
    如果进行了插入，则迭代器指向新插入的元素；否则，指向具有等价键的元素。
    抛出：;; 如果除调用 `hasher` 之外的操作抛出异常，则该函数无效。
    备注：;; 可能会使迭代器、指针和引用失效，但仅当插入导致负载大于最大负载时才会发生。
    此外，仅当 `Hash::is_transparent` 和 `Pred::is_transparent` 是有效的成员 typedef，并且 `K` 不能隐式转换为 `iterator` 或 `const_iterator` 时，此重载才会参与重载决议。库假定 `Hash` 可同时以 `K` 和 `Key` 类型调用，且 `Pred` 是透明的。这支持了异构查找，从而避免了实例化 `Key` 类型的开销。

en: Copy Insert with Hint
zh_Hans: 带提示的复制插入

en: ```c++ iterator insert(const_iterator hint, const value_type& obj); ``` Inserts `obj` in the container if and only if there is no element in the container with an equivalent key.
zh_Hans: ```c++iterator insert(const_iterator hint, const value_type&amp; obj);
    ```当且仅当容器中不存在具有等价键的元素时，才将 `obj` 插入容器中。

[ctx: :793]
en: `hint` is a suggestion to where the element should be inserted. This implementation ignores it.
zh_Hans: `hint` 是关于元素应该插入位置的一个提示。此实现会忽略它。

[ctx: :796]
en: Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/CopyInsertable[CopyInsertable^]. Returns:;; The `bool` component of the return type is `true` if an insert took place. + + If an insert took place, then the iterator points to the newly inserted element. Otherwise, it points to the element with equivalent key. Throws:;; If an exception is thrown by an operation other than a call to `hasher` the function has no effect. Notes:;; Can invalidate iterators, pointers and references, but only if the insert causes the load to be greater than the maximum load.
zh_Hans: 要求：;; `value_type` 必须是 https://en.cppreference.com/w/cpp/named_req/CopyInsertable[CopyInsertable^]。
    返回：;; 如果进行了插入，则返回类型的 `bool` 分量为 `true`。
    如果进行了插入，则迭代器指向新插入的元素；否则，指向具有等价键的元素。
    抛出：;; 如果除调用 `hasher` 之外的操作抛出异常，则该函数无效。
    备注：;; 可能会使迭代器、指针和引用失效，但仅当插入导致负载大于最大负载时才会发生。

en: Move Insert with Hint
zh_Hans: 带提示的移动插入

en: ```c++ iterator insert(const_iterator hint, value_type&& obj); ```
zh_Hans: ```c++ iterator insert(const_iterator hint, value_type&amp;&amp; obj); ```

[ctx: :810]
en: Inserts `obj` in the container if and only if there is no element in the container with an equivalent key.
zh_Hans: 当且仅当容器中不存在具有等价键的元素时，才将 `obj` 插入容器中。

[ctx: :812]
en: `hint` is a suggestion to where the element should be inserted. This implementation ignores it.
zh_Hans: `hint` 是关于元素应该插入位置的一个提示。此实现会忽略它。

[ctx: :815]
en: Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/MoveInsertable[MoveInsertable^]. Returns:;; The `bool` component of the return type is `true` if an insert took place. + + If an insert took place, then the iterator points to the newly inserted element. Otherwise, it points to the element with equivalent key. Throws:;; If an exception is thrown by an operation other than a call to `hasher` the function has no effect. Notes:;; Can invalidate iterators, pointers and references, but only if the insert causes the load to be greater than the maximum load.
zh_Hans: 要求：;; `value_type` 必须是 https://en.cppreference.com/w/cpp/named_req/MoveInsertable[MoveInsertable^]。
    返回：;; 如果进行了插入，则返回类型的 `bool` 分量为 `true`。
    如果进行了插入，则迭代器指向新插入的元素；否则，指向具有等价键的元素。
    抛出：;; 如果除调用 `hasher` 之外的操作抛出异常，则该函数无效。
    备注：;; 可能会使迭代器、指针和引用失效，但仅当插入导致负载大于最大负载时才会发生。

en: Transparent Insert with Hint
zh_Hans: 带提示的透明插入

en: ```c++ template<class K> std::pair<iterator, bool> insert(const_iterator hint, K&& k); ```
zh_Hans: ```c++ template<class k=""> std::pair<iterator, bool=""> insert(const_iterator hint, K&amp;&amp; k); ```</iterator,></class>

[ctx: :829]
en: Inserts an element constructed from `std::forward<K>(k)` in the container if and only if there is no element in the container with an equivalent key.
zh_Hans: 当且仅当容器中不存在具有等价键的元素时，才插入一个从 `std::forward<k>(k)` 构造的元素。</k>

[ctx: :831]
en: `hint` is a suggestion to where the element should be inserted. This implementation ignores it.
zh_Hans: `hint` 是关于元素应该插入位置的一个提示。此实现会忽略它。

[ctx: :834]
en: Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/EmplaceConstructible[EmplaceConstructible^] from `k`. Returns:;; The bool component of the return type is true if an insert took place. + + If an insert took place, then the iterator points to the newly inserted element. Otherwise, it points to the element with equivalent key. Throws:;; If an exception is thrown by an operation other than a call to `hasher` the function has no effect. Notes:;; Can invalidate iterators, pointers and references, but only if the insert causes the load to be greater than the maximum load. + + This overload only participates in overload resolution if `Hash::is_transparent` and `Pred::is_transparent` are valid member typedefs and neither `iterator` nor `const_iterator` are implicitly convertible from `K`. The library assumes that `Hash` is callable with both `K` and `Key` and that `Pred` is transparent. This enables heterogeneous lookup which avoids the cost of instantiating an instance of the `Key` type.
zh_Hans: 要求：;; `value_type` 可以从 `k` 进行 https://en.cppreference.com/w/cpp/named_req/EmplaceConstructible[EmplaceConstructible^]。返回：;; 如果进行了插入，则返回类型的 bool 分量为 true。如果进行了插入，则迭代器指向新插入的元素；否则，指向具有等价键的元素。抛出：;; 如果除调用 `hasher` 之外的操作抛出异常，则该函数无效。备注：;; 可能会使迭代器、指针和引用失效，但仅当插入导致负载大于最大负载时才会发生。此重载仅当 `Hash::is_transparent` 和 `Pred::is_transparent` 是有效的成员 typedef，并且 `K` 不能隐式转换为 `iterator` 或 `const_iterator` 时，才会参与重载决议。库假定 `Hash` 可同时以 `K` 和 `Key` 类型调用，且 `Pred` 是透明的。这支持了异构查找，从而避免了实例化 `Key` 类型的开销。

en: Insert Iterator Range
zh_Hans: 迭代器范围插入

en: ```c++ template<class InputIterator> void insert(InputIterator first, InputIterator last); ```
zh_Hans: ```c++ template<class inputiterator=""> void insert(InputIterator first, InputIterator last); ```</class>

[ctx: :850]
en: Inserts a range of elements into the container. Elements are inserted if and only if there is no element in the container with an equivalent key.
zh_Hans: 将一系列元素插入容器中。当且仅当容器中不存在具有等价键的元素时，才插入该元素。

en: Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/EmplaceConstructible[EmplaceConstructible^] into the container from `*first`. Throws:;; When inserting a single element, if an exception is thrown by an operation other than a call to `hasher` the function has no effect. Notes:;; Can invalidate iterators, pointers and references, but only if the insert causes the load to be greater than the maximum load.
zh_Hans: 要求：;; `value_type` 可以从 `*first` 进行 https://en.cppreference.com/w/cpp/named_req/EmplaceConstructible[EmplaceConstructible^] 到容器中。
    抛出：;; 当插入单个元素时，如果除调用 `hasher` 之外的操作抛出异常，则该函数无效。
    备注：;; 可能会使迭代器、指针和引用失效，但仅当插入导致负载大于最大负载时才会发生。

en: Insert Initializer List
zh_Hans: 初始化列表插入

en: ```c++ void insert(std::initializer_list<value_type>); ```
zh_Hans: ```c++ void insert(std::initializer_list<value_type>); ```</value_type>

[ctx: :864]
en: Inserts a range of elements into the container. Elements are inserted if and only if there is no element in the container with an equivalent key.
zh_Hans: 将一系列元素插入容器中。当且仅当容器中不存在具有等价键的元素时，才插入该元素。

en: Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/CopyInsertable[CopyInsertable^] into the container. Throws:;; When inserting a single element, if an exception is thrown by an operation other than a call to `hasher` the function has no effect. Notes:;; Can invalidate iterators, pointers and references, but only if the insert causes the load to be greater than the maximum load.
zh_Hans: 要求：;; `value_type` 必须可以 https://en.cppreference.com/w/cpp/named_req/CopyInsertable[CopyInsertable^] 到容器中。抛出：;; 当插入单个元素时，如果除调用 `hasher` 之外的操作抛出异常，则该函数无效。备注：;; 可能会使迭代器、指针和引用失效，但仅当插入导致负载大于最大负载时才会发生。

en: Erase by Position
zh_Hans: 通过位置擦除

en: Erase the element pointed to by `position`.
zh_Hans: 擦除由 `position` 指向的元素。

en: Returns:;; An opaque object implicitly convertible to the `iterator` or `const_iterator` immediately following `position` prior to the erasure. Throws:;; Nothing. Notes:;; The opaque object returned must only be discarded or immediately converted to `iterator` or `const_iterator`.
zh_Hans: 返回：;; 一个不透明对象，可隐式转换为擦除前紧接 `position` 之后的 `iterator` 或 `const_iterator`。抛出：;; 无。备注：;; 返回的不透明对象只能被丢弃或立即转换为 `iterator` 或 `const_iterator`。

en: Erase by Key
zh_Hans: 通过键擦除

en: ```c++ size_type erase(const key_type& k); template<class K> size_type erase(K&& k); ```
zh_Hans: ```c++ size_type erase(const key_type&amp; k); template<class k=""> size_type erase(K&amp;&amp; k); ```</class>

en: Erase all elements with key equivalent to `k`.
zh_Hans: 删除所有键与 `k` 等价的元素。

en: Returns:;; The number of elements erased. Throws:;; Only throws an exception if it is thrown by `hasher` or `key_equal`. Notes:;; The `template<class K>` overload only participates in overload resolution if `Hash::is_transparent` and `Pred::is_transparent` are valid member typedefs and neither `iterator` nor `const_iterator` are implicitly convertible from `K`. The library assumes that `Hash` is callable with both `K` and `Key` and that `Pred` is transparent. This enables heterogeneous lookup which avoids the cost of instantiating an instance of the `Key` type.
zh_Hans: 返回：;; 被删除的元素数量。抛出：;; 仅当由 `hasher` 或 `key_equal` 抛出异常时才会抛出异常。备注：;; `template<class k="">` 重载仅当 `Hash::is_transparent` 和 `Pred::is_transparent` 是有效的成员 typedef，并且 `K` 不能隐式转换为 `iterator` 或 `const_iterator` 时，才会参与重载决议。库假定 `Hash` 可同时以 `K` 和 `Key` 类型调用，且 `Pred` 是透明的。这支持了异构查找，从而避免了实例化 `Key` 类型的开销。</class>

en: Erase Range
zh_Hans: 范围擦除

en: Erases the elements in the range from `first` to `last`.
zh_Hans: 删除从 `first` 到 `last` 范围内的元素。

en: Returns:;; The iterator following the erased elements - i.e. `last`. Throws:;; Nothing in this implementation (neither the `hasher` nor the `key_equal` objects are called).
zh_Hans: 返回：;; 被删除元素之后的迭代器，即 `last`。抛出：;; 在此实现中不抛出任何异常（既不会调用 `hasher` 也不会调用 `key_equal` 对象）。

en: swap
zh_Hans: 交换

en: ```c++ void swap(unordered_flat_set& other) noexcept(boost::allocator_traits<Allocator>::is_always_equal::value || boost::allocator_traits<Allocator>::propagate_on_container_swap::value); ```
zh_Hans: ```c++ void swap(unordered_flat_set&amp; other) noexcept(boost::allocator_traits<allocator>::is_always_equal::value || boost::allocator_traits<allocator>::propagate_on_container_swap::value); ```</allocator></allocator>

en: Swaps the contents of the container with the parameter.
zh_Hans: 交换容器与参数的内容。

[ctx: :929]
en: If `Allocator::propagate_on_container_swap` is declared and `Allocator::propagate_on_container_swap::value` is `true` then the containers' allocators are swapped. Otherwise, swapping with unequal allocators results in undefined behavior.
zh_Hans: 如果 `Allocator::propagate_on_container_swap` 已声明且 `Allocator::propagate_on_container_swap::value` 为 `true`，则交换两个容器的分配器。否则，使用不相等的分配器进行交换将导致未定义行为。

en: Throws:;; Nothing unless `key_equal` or `hasher` throw on swapping.
zh_Hans: 抛出：;; 除非 `key_equal` 或 `hasher` 在交换时抛出异常，否则不抛出任何异常。

en: Move-constructs an `init_value` `x` from the element pointed to by `position`, erases the element and returns `x`.
zh_Hans: 从 `position` 指向的元素移动构造一个 `init_value` `x`，删除该元素并返回 `x`。

en: clear
zh_Hans: 清空

en: Erases all elements in the container.
zh_Hans: 清除容器中的所有元素。

en: Postconditions:;; `size() == 0`, `max_load() >= max_load_factor() * bucket_count()`
zh_Hans: Postconditions:;; `size() == 0`, `max_load() &gt;= max_load_factor() * bucket_count()`

en: merge
zh_Hans: 合并

en: ```c++ template<class H2, class P2> void merge(unordered_flat_set<Key, T, H2, P2, Allocator>& source); template<class H2, class P2> void merge(unordered_flat_set<Key, T, H2, P2, Allocator>&& source); ```
zh_Hans: ```c++ template<class h2,="" class="" p2=""> void merge(unordered_flat_set<key, t,="" h2,="" p2,="" allocator="">&amp; source); template<class h2,="" class="" p2=""> void merge(unordered_flat_set<key, t,="" h2,="" p2,="" allocator="">&amp;&amp; source); ```</key,></class></key,></class>

en: Move-inserts all the elements from `source` whose key is not already present in `*this`, and erases them from `source`.
zh_Hans: 移动插入 `source` 中所有键尚未存在于 `*this` 中的元素，并从 `source` 中删除它们。

en: Observers
zh_Hans: 观察器

en: Returns:;; The container's allocator.
zh_Hans: 返回：;; 容器的分配器。

en: hash_function
zh_Hans: 哈希函数

en: Returns:;; The container's hash function.
zh_Hans: 返回：;; 容器的哈希函数。

en: Returns:;; The container's key equality predicate
zh_Hans: 返回：;; 容器的键相等谓词。

en: Lookup
zh_Hans: 查找

en: ```c++ iterator         find(const key_type& k); const_iterator   find(const key_type& k) const; template<class K> iterator       find(const K& k);
zh_Hans: ```c++ iterator         find(const key_type&amp; k); const_iterator   find(const key_type&amp; k) const; template<class k=""> iterator       find(const K&amp; k);</class>

en: Returns:;; An iterator pointing to an element with key equivalent to `k`, or `end()` if no such element exists. Notes:;; The `template<class K>` overloads only participate in overload resolution if `Hash::is_transparent` and `Pred::is_transparent` are valid member typedefs. The library assumes that `Hash` is callable with both `K` and `Key` and that `Pred` is transparent. This enables heterogeneous lookup which avoids the cost of instantiating an instance of the `Key` type.
zh_Hans: 返回：;; 指向键与 `k` 等价之元素的迭代器，若无此元素则返回 `end()`。备注：;; `template<class k="">` 重载仅当 `Hash::is_transparent` 和 `Pred::is_transparent` 是有效的成员 typedef 时才会参与重载决议。库假定 `Hash` 可同时以 `K` 和 `Key` 类型调用，且 `Pred` 是透明的。这支持了异构查找，从而避免了实例化 `Key` 类型的开销。</class>

en: ```c++ size_type        count(const key_type& k) const; template<class K> size_type      count(const K& k) const; ```
zh_Hans: ```c++ size_type        count(const key_type&amp; k) const; template<class k=""> size_type      count(const K&amp; k) const; ```</class>

en: Returns:;; The number of elements with key equivalent to `k`. Notes:;; The `template<class K>` overload only participates in overload resolution if `Hash::is_transparent` and `Pred::is_transparent` are valid member typedefs. The library assumes that `Hash` is callable with both `K` and `Key` and that `Pred` is transparent. This enables heterogeneous lookup which avoids the cost of instantiating an instance of the `Key` type.
zh_Hans: 返回：;; 键与 `k` 等价的元素个数。备注：;; `template<class k="">` 重载仅当 `Hash::is_transparent` 和 `Pred::is_transparent` 是有效的成员 typedef 时才会参与重载决议。库假定 `Hash` 可同时以 `K` 和 `Key` 类型调用，且 `Pred` 是透明的。这支持了异构查找，从而避免了实例化 `Key` 类型的开销。</class>

en: contains
zh_Hans: 包含

en: ```c++ bool             contains(const key_type& k) const; template<class K> bool           contains(const K& k) const; ```
zh_Hans: ```c++ bool             contains(const key_type&amp; k) const; template<class k=""> bool           contains(const K&amp; k) const; ```</class>

en: Returns:;; A boolean indicating whether or not there is an element with key equal to `key` in the container Notes:;; The `template<class K>` overload only participates in overload resolution if `Hash::is_transparent` and `Pred::is_transparent` are valid member typedefs. The library assumes that `Hash` is callable with both `K` and `Key` and that `Pred` is transparent. This enables heterogeneous lookup which avoids the cost of instantiating an instance of the `Key` type.
zh_Hans: 返回：;; 一个布尔值，指示容器中是否存在键等于 `key` 的元素。备注：;; `template<class k="">` 重载仅当 `Hash::is_transparent` 和 `Pred::is_transparent` 是有效的成员 typedef 时才会参与重载决议。库假定 `Hash` 可同时以 `K` 和 `Key` 类型调用，且 `Pred` 是透明的。这支持了异构查找，从而避免了实例化 `Key` 类型的开销。</class>

en: ```c++ std::pair<iterator, iterator>               equal_range(const key_type& k); std::pair<const_iterator, const_iterator>   equal_range(const key_type& k) const; template<class K> std::pair<iterator, iterator>             equal_range(const K& k); template<class K> std::pair<const_iterator, const_iterator> equal_range(const K& k) const; ```
zh_Hans: ```c++ std::pair<iterator, iterator="">               equal_range(const key_type&amp; k); std::pair<const_iterator, const_iterator="">   equal_range(const key_type&amp; k) const; template<class k=""> std::pair<iterator, iterator="">             equal_range(const K&amp; k); template<class k=""> std::pair<const_iterator, const_iterator=""> equal_range(const K&amp; k) const; ```</const_iterator,></class></iterator,></class></const_iterator,></iterator,>

en: Returns:;; A range containing all elements with key equivalent to `k`. If the container doesn't contain any such elements, returns `std::make_pair(b.end(), b.end())`. Notes:;; The `template<class K>` overloads only participate in overload resolution if `Hash::is_transparent` and `Pred::is_transparent` are valid member typedefs. The library assumes that `Hash` is callable with both `K` and `Key` and that `Pred` is transparent. This enables heterogeneous lookup which avoids the cost of instantiating an instance of the `Key` type.
zh_Hans: 返回：;; 一个范围，包含所有键与 `k` 等价的元素。若容器中不包含任何此类元素，则返回 `std::make_pair(b.end(), b.end())`。备注：;; `template<class k="">` 重载仅当 `Hash::is_transparent` 和 `Pred::is_transparent` 是有效的成员 typedef 时才会参与重载决议。库假定 `Hash` 可同时以 `K` 和 `Key` 类型调用，且 `Pred` 是透明的。这支持了异构查找，从而避免了实例化 `Key` 类型的开销。</class>

en: Bucket Interface
zh_Hans: 桶接口

en: Returns:;; The size of the bucket array.
zh_Hans: 返回：;; 桶数组的大小。

en: Hash Policy
zh_Hans: 哈希策略

en: load_factor
zh_Hans: 负载因子

en: Returns:;; `static_cast<float>(size())/static_cast<float>(bucket_count())`, or `0` if `bucket_count() == 0`.
zh_Hans: 返回：;; `static_cast<float>(size())/static_cast<float>(bucket_count())`，如果 `bucket_count() == 0` 则返回 `0`。</float></float>

en: max_load_factor
zh_Hans: 最大负载因子

en: Returns:;; Returns the container's maximum load factor.
zh_Hans: 返回：;; 返回容器的最大负载因子。

en: Set max_load_factor
zh_Hans: 设置最大负载因子

en: Effects:;; Does nothing, as the user is not allowed to change this parameter. Kept for compatibility with `boost::unordered_set`.
zh_Hans: 效果：;; 不执行任何操作，因为用户不允许更改此参数。为与 `boost::unordered_set` 保持兼容而保留。

en: max_load
zh_Hans: 最大负载

en: Returns:;; The maximum number of elements the container can hold without rehashing, assuming that no further elements will be erased. Note:;; After construction, rehash or clearance, the container's maximum load is at least `max_load_factor() * bucket_count()`. This number may decrease on erasure under high-load conditions.
zh_Hans: 返回：;; 假设不再删除更多元素，容器在不进行重哈希的情况下所能容纳的最大元素数量。注意：;; 在构造、重哈希或清空之后，容器的最大负载至少为 `max_load_factor() * bucket_count()`。在高负载条件下，该值可能因删除操作而减小。

en: rehash
zh_Hans: 重哈希

en: Changes if necessary the size of the bucket array so that there are at least `n` buckets, and so that the load factor is less than or equal to the maximum load factor. When applicable, this will either grow or shrink the `bucket_count()` associated with the container.
zh_Hans: 必要时改变桶数组的大小，使得至少包含 `n` 个桶，并且负载因子小于或等于最大负载因子。在适用的情况下，这将增大或缩小与容器相关联的 `bucket_count()`。

en: When `size() == 0`, `rehash(0)` will deallocate the underlying buckets array. If the provided Allocator uses fancy pointers, a default allocation is subsequently performed.
zh_Hans: 当 `size() == 0` 时，`rehash(0)` 将释放底层桶数组的内存。如果所提供的分配器使用 fancy pointers，随后将执行一次默认分配。

[ctx: :1129]
en: Invalidates iterators, pointers and references, and changes the order of elements.
zh_Hans: 使迭代器、指针和引用失效，并改变元素的顺序。

[ctx: :1132]
en: Throws:;; The function has no effect if an exception is thrown, unless it is thrown by the container's hash function or comparison function.
zh_Hans: 抛出：;; 如果抛出异常（除非是由容器的哈希函数或比较函数抛出），则该函数无效。

en: reserve
zh_Hans: 保留

en: Equivalent to `a.rehash(ceil(n / a.max_load_factor()))`.
zh_Hans: 等价于 `a.rehash(ceil(n / a.max_load_factor()))`。

en: Similar to `rehash`, this function can be used to grow or shrink the number of buckets in the container.
zh_Hans: 与 `rehash` 类似，此函数可用于增加或减少容器中桶的数量。

[ctx: :1145]
en: Invalidates iterators, pointers and references, and changes the order of elements.
zh_Hans: 使迭代器、指针和引用失效，并改变元素的顺序。

[ctx: :1148]
en: Throws:;; The function has no effect if an exception is thrown, unless it is thrown by the container's hash function or comparison function.
zh_Hans: 抛出：;; 如果抛出异常（除非是由容器的哈希函数或比较函数抛出），则该函数无效。

en: Statistics
zh_Hans: 统计信息

en: Returns:;; A statistical description of the insertion and lookup operations performed by the container so far. Notes:;; Only available if xref:reference/stats.adoc#stats[statistics calculation] is xref:unordered_flat_set_boost_unordered_enable_stats[enabled].
zh_Hans: 返回：;; 对容器迄今为止所执行的插入和查找操作的统计描述。备注：;; 仅在 xref:reference/stats.adoc#stats[统计信息计算] 已 xref:unordered_flat_set_boost_unordered_enable_stats[启用] 时可用。

en: Effects:;; Sets to zero the internal statistics kept by the container. Notes:;; Only available if xref:reference/stats.adoc#stats[statistics calculation] is xref:unordered_flat_set_boost_unordered_enable_stats[enabled].
zh_Hans: 效果：;; 将容器内部保持的统计信息归零。备注：;; 仅在 xref:reference/stats.adoc#stats[统计信息计算] 已 xref:unordered_flat_set_boost_unordered_enable_stats[启用] 时可用。

en: Deduction Guides
zh_Hans: 推导指引

en: A deduction guide will not participate in overload resolution if any of the following are true:
zh_Hans: 在以下任一条件成立时，推导指引将不参与重载决议：

en: - It has an `InputIterator` template parameter and a type that does not qualify as an input iterator is deduced for that parameter. - It has an `Allocator` template parameter and a type that does not qualify as an allocator is deduced for that parameter. - It has a `Hash` template parameter and an integral type or a type that qualifies as an allocator is deduced for that parameter. - It has a `Pred` template parameter and a type that qualifies as an allocator is deduced for that parameter.
zh_Hans: - 它具有 `InputIterator` 模板参数，并且为该参数推导出的类型不符合输入迭代器的要求。- 它具有 `Allocator` 模板参数，并且为该参数推导出的类型不符合分配器的要求。- 它具有 `Hash` 模板参数，并且为该参数推导出的是整数类型或符合分配器要求的类型。- 它具有 `Pred` 模板参数，并且为该参数推导出的是符合分配器要求的类型。

en: A `size_­type` parameter type in a deduction guide refers to the `size_­type` member type of the container type deduced by the deduction guide. Its default value coincides with the default value of the constructor selected.
zh_Hans: 推导指引中的 `size_type` 参数类型指向由该推导指引所推导出的容器类型的 `size_type` 成员类型。其默认值与所选构造函数的默认值一致。

en: __iter-value-type__
zh_Hans: _iter-value-type_

en: Equality Comparisons
zh_Hans: 相等性比较

en: ```c++ template<class Key, class T, class Hash, class Pred, class Alloc> bool operator==(const unordered_flat_set<Key, T, Hash, Pred, Alloc>& x, const unordered_flat_set<Key, T, Hash, Pred, Alloc>& y); ```
zh_Hans: ```c++ template<class key,="" class="" t,="" hash,="" pred,="" alloc=""> bool operator==(const unordered_flat_set<key, t,="" hash,="" pred,="" alloc="">&amp; x, const unordered_flat_set<key, t,="" hash,="" pred,="" alloc="">&amp; y); ```</key,></key,></class>

en: Return `true` if `x.size() == y.size()` and for every element in `x`, there is an element in `y` with the same key, with an equal value (using `operator==` to compare the value types).
zh_Hans: 如果 `x.size() == y.size()` 并且对于 `x` 中的每个元素，在 `y` 中都有一个具有相同键且值相等的元素（使用 `operator==` 比较值类型），则返回 `true`。

[ctx: :1208]
en: Notes:;; Behavior is undefined if the two containers don't have equivalent equality predicates.
zh_Hans: 备注：;; 如果两个容器不具有等价的相等谓词，则行为未定义。

en: ```c++ template<class Key, class T, class Hash, class Pred, class Alloc> bool operator!=(const unordered_flat_set<Key, T, Hash, Pred, Alloc>& x, const unordered_flat_set<Key, T, Hash, Pred, Alloc>& y); ```
zh_Hans: ```c++ template<class key,="" class="" t,="" hash,="" pred,="" alloc=""> bool operator!=(const unordered_flat_set<key, t,="" hash,="" pred,="" alloc="">&amp; x, const unordered_flat_set<key, t,="" hash,="" pred,="" alloc="">&amp; y); ```</key,></key,></class>

en: Return `false` if `x.size() == y.size()` and for every element in `x`, there is an element in `y` with the same key, with an equal value (using `operator==` to compare the value types).
zh_Hans: 如果 `x.size() == y.size()` 并且对于 `x` 中的每个元素，在 `y` 中都有一个具有相同键且值相等的元素（使用 `operator==` 比较值类型），则返回 `false`。

[ctx: :1222]
en: Notes:;; Behavior is undefined if the two containers don't have equivalent equality predicates.
zh_Hans: 备注：;; 如果两个容器不具有等价的相等谓词，则行为未定义。

en: Swap
zh_Hans: 交换

en: ```c++ template<class Key, class T, class Hash, class Pred, class Alloc> void swap(unordered_flat_set<Key, T, Hash, Pred, Alloc>& x, unordered_flat_set<Key, T, Hash, Pred, Alloc>& y) noexcept(noexcept(x.swap(y))); ```
zh_Hans: ```c++ template<class key,="" class="" t,="" hash,="" pred,="" alloc=""> void swap(unordered_flat_set<key, t,="" hash,="" pred,="" alloc="">&amp; x, unordered_flat_set<key, t,="" hash,="" pred,="" alloc="">&amp; y) noexcept(noexcept(x.swap(y))); ```</key,></key,></class>

en: Swaps the contents of `x` and `y`.
zh_Hans: 交换 `x` 和 `y` 的内容。

[ctx: :1234]
en: If `Allocator::propagate_on_container_swap` is declared and `Allocator::propagate_on_container_swap::value` is `true` then the containers' allocators are swapped. Otherwise, swapping with unequal allocators results in undefined behavior.
zh_Hans: 如果 `Allocator::propagate_on_container_swap` 已声明且 `Allocator::propagate_on_container_swap::value` 为 `true`，则交换两个容器的分配器。否则，使用不相等的分配器进行交换将导致未定义行为。

en: Effects:;; `x.swap(y)` Throws:;; Nothing unless `key_equal` or `hasher` throw on swapping.
zh_Hans: 效果：;; `x.swap(y)` 抛出：;; 除非 `key_equal` 或 `hasher` 在交换时抛出异常，否则不抛出任何异常。

en: ```c++ template<class K, class T, class H, class P, class A, class Predicate> typename unordered_flat_set<K, T, H, P, A>::size_type erase_if(unordered_flat_set<K, T, H, P, A>& c, Predicate pred); ```
zh_Hans: ```c++ template<class k,="" class="" t,="" h,="" p,="" a,="" predicate=""> typename unordered_flat_set<k, t,="" h,="" p,="" a="">::size_type erase_if(unordered_flat_set<k, t,="" h,="" p,="" a="">&amp; c, Predicate pred); ```</k,></k,></class>

en: Traverses the container `c` and removes all elements for which the supplied predicate returns `true`.
zh_Hans: 遍历容器 `c` 并移除所有使给定谓词返回 `true` 的元素。

en: Returns:;; The number of erased elements. Notes:;; Equivalent to: + + ```c++ auto original_size = c.size(); for (auto i = c.begin(), last = c.end(); i != last; ) { if (pred(*i)) { i = c.erase(i); } else { ++i; } } return original_size - c.size(); ```
zh_Hans: 返回：;; 被移除的元素数量。备注：;; 等价于：```c++ auto original_size = c.size(); for (auto i = c.begin(), last = c.end(); i != last; ) { if (pred(*i)) { i = c.erase(i); } else { ++i; } } return original_size - c.size(); ```

en: Serialization
zh_Hans: 序列化

en: ``unordered_flat_set``s can be archived/retrieved by means of link:../../../../../serialization/index.html[Boost.Serialization^] using the API provided by this library. Both regular and XML archives are supported.
zh_Hans: `unordered_flat_set` 可以通过本库提供的 API，使用 link:../../../../../serialization/index.html[Boost.Serialization^] 进行归档/恢复。支持常规归档和 XML 归档。

en: Saving an unordered_flat_set to an archive
zh_Hans: 将 unordered_flat_set 保存到归档中

en: Saves all the elements of an `unordered_flat_set` `x` to an archive (XML archive) `ar`.
zh_Hans: 将 `unordered_flat_set` `x` 的所有元素保存到归档（XML 归档）`ar` 中。

en: Requires:;; `value_type` is serializable (XML serializable), and it supports Boost.Serialization `save_construct_data`/`load_construct_data` protocol (automatically suported by https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^] types).
zh_Hans: 要求：;; `value_type` 必须是可序列化的（支持 XML 序列化），并且支持 Boost.Serialization 的 `save_construct_data`/`load_construct_data` 协议（该协议由 https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^] 类型的自动支持）。

en: Loading an unordered_flat_set from an archive
zh_Hans: 从归档中加载 unordered_flat_set

en: Deletes all preexisting elements of an `unordered_flat_set` `x` and inserts from an archive (XML archive) `ar` restored copies of the elements of the original `unordered_flat_set` `other` saved to the storage read by `ar`.
zh_Hans: 删除 `unordered_flat_set` `x` 中所有已存在的元素，并从归档（XML 归档）`ar` 中插入由 `ar` 所读取存储中保存的原始 `unordered_flat_set` `other` 元素的恢复副本。

en: Requires:;; `x.key_equal()` is functionally equivalent to `other.key_equal()`.
zh_Hans: 要求：;; `x.key_equal()` 在功能上等价于 `other.key_equal()`。

en: Saving an iterator/const_iterator to an archive
zh_Hans: 将迭代器/常量迭代器保存到归档

en: Saves the positional information of an `iterator` (`const_iterator`) `it` to an archive (XML archive) `ar`. `it` can be and `end()` iterator.
zh_Hans: 将 `iterator`（`const_iterator`）`it` 的位置信息保存到归档（XML 归档）`ar` 中。`it` 可以是 `end()` 迭代器。

en: Requires:;; The `unordered_flat_set` `x` pointed to by `it` has been previously saved to `ar`, and no modifying operations have been issued on `x` between saving of `x` and saving of `it`.
zh_Hans: 要求：;; `it` 所指向的 `unordered_flat_set` `x` 此前已保存至 `ar`，并且在保存 `x` 和保存 `it` 之间未对 `x` 执行任何修改操作。

en: Loading an iterator/const_iterator from an archive
zh_Hans: 从归档加载迭代器/常量迭代器

en: Makes an `iterator` (`const_iterator`) `it` point to the restored position of the original `iterator` (`const_iterator`) saved to the storage read by an archive (XML archive) `ar`.
zh_Hans: 使 `iterator`（`const_iterator`）`it` 指向保存到由归档（XML 归档）`ar` 读取的存储中的原始 `iterator`（`const_iterator`）的被恢复位置。

en: Requires:;; If `x` is the `unordered_flat_set` `it` points to, no modifying operations have been issued on `x` between loading of `x` and loading of `it`.
zh_Hans: 要求：;; 如果 `x` 是 `it` 所指向的 `unordered_flat_set`，则在加载 `x` 和加载 `it` 之间未对 `x` 执行任何修改操作。
