<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="">[#concurrent_flat_map]</string>
    <string name="">类模板 concurrent_flat_map</string>
    <string name="">:idprefix: concurrent_flat_map_</string>
    <string name="">`boost::concurrent_flat_map` — 一种哈希表，将唯一键与对应值关联，并允许在无需外部同步机制的情况下进行并发的元素插入、删除、查找和访问。</string>
    <string name="">尽管它充当容器的角色，boost::concurrent_flat_map 并未遵循标准 C++ 的 https://en.cppreference.com/w/cpp/named_req/Container[Container^] 概念。特别地，它不提供迭代器及相关操作（例如 begin、end 等）。元素的访问和修改是通过用户提供的 访问函数 来完成的，这些函数被传递给 concurrent_flat_map 的操作，并以受控的方式在内部执行。这种基于访问的 API 能够实现低竞争并发的使用场景。</string>
    <string name="">`boost::concurrent++_++flat++_++map` 的内部数据结构与 `boost::unordered++_++flat++_++map` 类似。由于采用开放寻址技术， `value++_++type` 必须支持移动构造，且在重哈希过程中无法保持指针稳定性。</string>
    <string name="">概要</string>
    <string name=":329">---</string>
    <string name="">描述</string>
    <string name="">*模板参数*</string>
    <string name="">_键_</string>
    <string name="">`std::pair&lt;const key,=\"\" t=\"\"&gt;` 必须能够从任何可转换为其的 `std::pair` 对象出发，在表中进行 https://en.cppreference.com/w/cpp/named_req/EmplaceConstructible[EmplaceConstructible^] 构造，并且也必须可以从表中进行 https://en.cppreference.com/w/cpp/named_req/Erasable[Erasable^] 擦除。&lt;/const&gt;</string>
    <string name="">_T_</string>
    <string name="">_Hash_</string>
    <string name="">一种一元函数对象类型，用作Key类型的哈希函数。它接受单个Key类型的参数，并返回std::size_t类型的值。</string>
    <string name="">_Pred_</string>
    <string name="">一种二元函数对象，用于在Key类型的值上引入等价关系。该对象接收两个Key类型的参数，并返回一个bool类型的值。</string>
    <string name="">_Allocator_</string>
    <string name="">值类型与哈希表值类型相同的分配器。</string>
    <string name="">支持使用https://en.cppreference.com/w/cpp/named_req/Allocator#Fancy_pointers[花式指针] 的分配器。</string>
    <string name="">容器的元素存储在内部的__桶数组__中。元素根据其哈希码被插入到对应的桶中，但如果该桶已被占用（即发生__冲突__），则会使用原始位置附近可用的桶。</string>
    <string name="">桶数组的大小可通过调用 `insert` / `emplace` 自动增加，也可通过调用 `rehash` / `reserve` 进行调整。容器的__负载因子__（元素数量与桶数量的比值）永远不会超过 `max++_++load++_++factor()` ，但在小规模数据情况下，实现可能允许更高的负载因子。</string>
    <string name="">若 link:../../../../../container_hash/doc/html/hash.html#ref_hash_is_avalanchinghash[`hash++_++is++_++avalanching`]`++&lt;++Hash++&gt;++::value` 为 `true` ，则直接使用哈希函数；否则，会添加一个位混合后处理阶段以提高哈希质量，但会牺牲额外的计算成本。</string>
    <string name=":371">---</string>
    <string name="">并发要求与保证</string>
    <string name="">要求对同一 `Hash` 或 `Pred` 常量实例并发调用 `operator()` 时不得引入数据竞争。对于 `Alloc` （即 `Allocator` 或其重绑定后的任意分配器类型），在同一实例 `al` 上并发调用以下操作时不得引入数据竞争：</string>
    <string name="">从Alloc重新绑定后的分配器的al进行拷贝构造</string>
    <string name="">`std::allocator_traits<alloc>::allocate`</alloc></string>
    <string name="">`std::allocator_traits<alloc>::deallocate`</alloc></string>
    <string name="">`std::allocator_traits<alloc>::construct`</alloc></string>
    <string name="">`std::allocator_traits<alloc>::destroy`</alloc></string>
    <string name="">通常而言，若 `Hash` 、 `Pred` 和 `Allocator` 这些类型不包含状态，或其操作仅涉及对内部数据成员的常量访问，即可满足上述要求。</string>
    <string name="">除了析构操作外，在同一个 `concurrent_flat_map` 实例上并发调用任何操作都不会引入数据竞争——即这些操作是线程安全的。</string>
    <string name="">若某个操作 *op* 被显式指定为__阻塞于__ `x` （其中 `x` 为 `boost::concurrent_flat_map` 实例），则先前对 `x` 的阻塞操作将与 *op* 同步。因此，在多线程场景中，对同一 `concurrent_flat_map` 的阻塞操作将按顺序执行。</string>
    <string name="">若某个操作仅在触发内部重哈希时才会阻塞于 _`x`_，则称该操作阻塞于 _`x`_ 的重哈希过程。</string>
    <string name="">当由 `boost::concurrent_flat_map` 内部执行时，用户提供的访问函数对传入元素执行以下操作不会引入数据竞争：</string>
    <string name="">对元素的读取访问。</string>
    <string name="">对元素的非可变修改。</string>
    <string name="">对元素的可变修改：</string>
    <string name="">** 在容器接受两个访问函数的操作中，此条件始终适用于第一个访问函数。 ** 在名称不包含 `cvisit` 的非常量容器函数中，此条件适用于最后一个（或唯一一个）访问函数。</string>
    <string name="">任何插入或修改元素 `e` 的 `boost::concurrent_flat_map operation` 操作，都会与针对 `e` 的内部访问函数调用同步。</string>
    <string name="">由 `boost::concurrent_flat_map` 容器 `x` 执行的访问函数不得调用 `x` 上的任何操作；仅当对另一 `boost::concurrent_flat_map` 实例 `y` 的并发的未完成操作不直接或间接访问 `x` 时，才允许调用实例 `y` 上的操作。</string>
    <string name=":415">---</string>
    <string name="">配置宏</string>
    <string name="">`BOOST_UNORDERED_DISABLE_REENTRANCY_CHECK`</string>
    <string name="">在调试版本中（更准确地说，当未定义 link:../../../../../assert/doc/html/assert.html#boost_assert_is_void[`BOOST_ASSERT_IS_VOID`] 时），系统会检测__容器重入__行为（即在访问 `m` 元素的函数内部非法调用 `m` 上的操作），并通过 `BOOST_ASSERT_MSG` 发出信号。若需关注运行时速度，可通过全局定义此宏来禁用该功能。</string>
    <string name=":428">---</string>
    <string name="">`BOOST_UNORDERED_ENABLE_STATS`</string>
    <string name="">全局定义此宏以启用容器的 xref:reference/stats.adoc#stats[统计计算] 功能。请注意，此选项会降低多数操作的总体性能。</string>
    <string name=":435">---</string>
    <string name="">常量</string>
    <string name="">```cpp static constexpr size_type bulk_visit_size; ```</string>
    <string name="">xref:concurrent_flat_map_bulk_visit [批量访问] 操作内部使用的块大小。</string>
    <string name="">构造函数</string>
    <string name="">默认构造函数</string>
    <string name="">```c++ concurrent_flat_map(); ```</string>
    <string name="">使用hasher()作为哈希函数、key_equal()作为键相等谓词、allocator_type()作为分配器，构造一个空表。</string>
    <string name=":456">后置条件：size() == 0\n要求：若使用默认构造方式，则hasher、key_equal和allocator_type必须满足https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[默认可构造]要求。</string>
    <string name=":459">---</string>
    <string name="">桶数构造函数</string>
    <string name="">```c++ explicit concurrent_flat_map(size_type n, const hasher&amp; hf = hasher(), const key_equal&amp; eql = key_equal(), const allocator_type&amp; a = allocator_type()); ```</string>
    <string name="">构造一个至少包含n个桶的空表，使用hf作为哈希函数、eql作为键相等谓词、a作为分配器。</string>
    <string name=":473">后置条件：size() == 0\n要求：若使用默认参数，则hasher、key_equal和allocator_type必须满足https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[默认可构造]要求。</string>
    <string name=":476">---</string>
    <string name="">迭代器范围构造函数</string>
    <string name="">构造一个至少包含 `n` 个桶的空容器，使用 `hf` 作为哈希函数、 `eql` 作为键相等性谓词、 `a` 作为分配器，并将 `[f, l)` 范围内的元素插入其中。</string>
    <string name=":492">要求;; 若使用默认值，则 `hasher` 、 `key++_++equal` 和 `allocator++_++type` 需满足 https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[可默认构造] 要求。</string>
    <string name=":494">---</string>
    <string name="">复制构造函数</string>
    <string name="">```c++ concurrent_flat_map(concurrent_flat_map const&amp; other); ```</string>
    <string name="">拷贝构造函数。复制容器内的元素、哈希函数、谓词以及分配器。</string>
    <string name="">若Allocator::select_on_container_copy_construction存在且签名正确，则分配器将根据其返回值构造。</string>
    <string name="">要求：value_type 支持复制构造。 并发特性：阻塞于 other</string>
    <string name=":509">---</string>
    <string name="">移动构造函数</string>
    <string name="">```c++ concurrent_flat_map(concurrent_flat_map&amp;&amp; other); ```</string>
    <string name="">移动构造函数。other 的内部桶数组会直接转移到新表中。哈希函数、谓词和分配器均从 other 移动构造而来。如果启用了 xref:concurrent_flat_map_boost_unordered_enable_stats [统计功能]，则从 other 转移内部统计信息，并调用 other.reset_stats()。</string>
    <string name=":522">并发特性：阻塞于 other</string>
    <string name=":524">---</string>
    <string name="">带分配器的迭代器范围构造函数</string>
    <string name="">```c++ template<class inputiterator=""> concurrent_flat_map(InputIterator f, InputIterator l, const allocator_type&amp; a); ```</class></string>
    <string name="">以a作为分配器，使用默认哈希函数与键相等谓词构造空表，并将[f, l)范围内的元素插入其中。</string>
    <string name=":535">要求：hasher、key_equal 必须满足https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[默认可构造]要求。</string>
    <string name=":537">---</string>
    <string name="">分配器构造函数</string>
    <string name="">```c++ explicit concurrent_flat_map(Allocator const&amp; a); ```</string>
    <string name="">使用分配器a构造一个空表。</string>
    <string name=":546">---</string>
    <string name="">带分配器的复制构造函数</string>
    <string name="">```c++ concurrent_flat_map(concurrent_flat_map const&amp; other, Allocator const&amp; a); ```</string>
    <string name="">构造一个表，复制other的容器元素、哈希函数和谓词，但使用分配器a。</string>
    <string name=":556">并发特性：阻塞于 other</string>
    <string name=":558">---</string>
    <string name="">带分配器的移动构造函数</string>
    <string name="">```c++ concurrent_flat_map(concurrent_flat_map&amp;&amp; other, Allocator const&amp; a); ```</string>
    <string name="">若a == other.get_allocator()，则other的元素会直接转移到新表中；否则，元素从other移动构造而来。\n哈希函数与谓词从other移动构造，分配器从a拷贝构造。\n如果启用了 xref:concurrent_flat_map_boost_unordered_enable_stats [统计功能]：\n当且仅当a == other.get_allocator()时，从other转移内部统计信息\n始终调用other.reset_stats()</string>
    <string name=":573">并发特性：阻塞于 other</string>
    <string name=":575">---</string>
    <string name="">从 unordered_flat_map 的移动构造函数</string>
    <string name="">```c++ concurrent_flat_map(unordered_flat_map&lt;key, t,=\"\" hash,=\"\" pred,=\"\" allocator=\"\"&gt;&amp;amp;&amp;amp; other); ```&lt;/key,&gt;</string>
    <string name="">从 xref:#unordered_flat_map [unordered_flat_map] 进行移动构造。other的内部桶数组会直接转移到新容器中。哈希函数、谓词和分配器均从other移动构造而来。如果启用了 xref:concurrent_flat_map_boost_unordered_enable_stats [统计功能]，则从other转移内部统计信息，并调用other.reset_stats()。</string>
    <string name="">复杂度：O (`bucket_count()`)</string>
    <string name=":592">---</string>
    <string name="">初始化列表构造函数</string>
    <string name="">构造一个至少包含 `n` 个桶的空容器，使用 `hf` 作为哈希函数、 `eql` 作为键相等性谓词、 `a` 作为分配器，并 `il` 中的元素插入其中。</string>
    <string name=":607">要求;; 若使用默认值，则 `hasher` 、 `key++_++equal` 和 `allocator++_++type` 需满足 https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[可默认构造] 要求。</string>
    <string name=":609">---</string>
    <string name="">带分配器的桶数构造函数</string>
    <string name="">```c++ concurrent_flat_map(size_type n, allocator_type const&amp; a); ```</string>
    <string name="">构造一个至少包含 n 个桶的空表，使用 hf 作为哈希函数、默认的键相等谓词，并以 a 作为分配器。</string>
    <string name="">后置条件：size() == 0\n要求：hasher 和 key_equal 必须满足https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[默认可构造]要求。</string>
    <string name=":622">---</string>
    <string name="">带哈希函数和分配器的桶数构造函数</string>
    <string name="">```c++ concurrent_flat_map(size_type n, hasher const&amp; hf, allocator_type const&amp; a); ```</string>
    <string name="">构造一个至少包含 n 个桶的空表，使用 hf 作为哈希函数、默认键相等谓词，并以 a 作为分配器。</string>
    <string name="">后置条件：size() == 0\n要求：key_equal 必须满足https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[默认可构造]。</string>
    <string name=":635">---</string>
    <string name="">带桶数和分配器的迭代器范围构造函数</string>
    <string name="">构造一个至少包含 `n` 个桶的空容器，使用 `a` 作为分配器以及默认的哈希函数和键相等性谓词，并将 `++[++f, l)` 范围内的元素插入其中。</string>
    <string name=":647">要求;; `hasher` 和 `key++_++equal` 需满足 https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[可默认构造] 要求。</string>
    <string name=":649">---</string>
    <string name="">带桶数和哈希函数的迭代器范围构造函数</string>
    <string name="">构造一个至少包含 `n` 个桶的空容器，使用 `hf` 作为哈希函数、 `a` 作为分配器以及默认的键相等性谓词，并将 `[f, l)` 范围内的元素插入其中。</string>
    <string name=":662">要求;; `key++_++equal` 需满足 https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[可默认构造] 要求。</string>
    <string name=":664">---</string>
    <string name="">带分配器的初始化列表构造函数</string>
    <string name="">```c++ concurrent_flat_map(std::initializer_list<value_type> il, const allocator_type&amp; a); ```</value_type></string>
    <string name="">使用分配器a以及默认哈希函数、键相等谓词构造空表，并将il中的元素插入表中。</string>
    <string name=":675">要求：`hasher` 和 `key_equal` 需满足 https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[可默认构造^] 要求。</string>
    <string name=":677">---</string>
    <string name="">带桶数和分配器的初始化列表构造函数</string>
    <string name="">```c++ concurrent_flat_map(std::initializer_list<value_type> il, size_type n, const allocator_type&amp; a); ```</value_type></string>
    <string name="">构造一个至少包含 n 个桶的空表，使用分配器 a 以及默认哈希函数、键相等谓词，并将 il 中的元素插入表中。</string>
    <string name=":688">要求：`hasher` 和 `key_equal` 需满足 https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[可默认构造^] 要求。</string>
    <string name=":690">---</string>
    <string name="">带桶数、哈希函数和分配器的初始化列表构造函数</string>
    <string name="">```c++ concurrent_flat_map(std::initializer_list<value_type> il, size_type n, const hasher&amp; hf, const allocator_type&amp; a); ```</value_type></string>
    <string name="">构造一个至少包含 n 个桶的空表，使用 hf 作为哈希函数、a 作为分配器、默认键相等谓词，并将 il 中的元素插入表中。</string>
    <string name=":702">要求：key_equal 须满足https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[默认可构造]要求。</string>
    <string name=":704">---</string>
    <string name="">析构函数</string>
    <string name="">```c++</string>
    <string name="">备注：析构函数会作用于所有元素，且所有内存都会被释放。</string>
    <string name=":715">---</string>
    <string name="">赋值操作</string>
    <string name="">复制赋值</string>
    <string name="">```c++ concurrent_flat_map&amp; operator=(concurrent_flat_map const&amp; other); ```</string>
    <string name="">赋值运算符。销毁原有的所有元素，从other复制赋值哈希函数与谓词；若Alloc::propagate_on_container_copy_assignment存在且其值为true，则从other复制赋值分配器；最终插入other元素的副本。</string>
    <string name="">要求：`value_type` 需满足 https://en.cppreference.com/w/cpp/named_req/CopyInsertable[可复制插入^] 要求。并发：阻塞 `*this` 和 `other`。</string>
    <string name=":733">---</string>
    <string name="">移动赋值</string>
    <string name="">```c++ concurrent_flat_map&amp;amp; operator=(concurrent_flat_map&amp;amp;&amp;amp; other) noexcept((boost::allocator_traits&lt;allocator&gt;::is_always_equal::value || boost::allocator_traits&lt;allocator&gt;::propagate_on_container_move_assignment::value) &amp;amp;&amp;amp; std::is_same&lt;pointer, value_type*=\"\"&gt;::value); ``` \n移动赋值运算符。销毁当前容器原有的所有元素，交换other的哈希函数与谓词；若Alloc::propagate_on_container_move_assignment存在且其值为true，则从other移动赋值分配器。\n若此时分配器与other.get_allocator()相等，则直接转移other的内部桶数组至当前容器；否则，插入other元素的移动构造副本。\n如果启用了统计功能：\n当且仅当最终分配器与other.get_allocator()相等时，从other转移内部统计信息\n始终调用other.reset_stats()&lt;/pointer,&gt;&lt;/allocator&gt;&lt;/allocator&gt;</string>
    <string name="">并发：阻塞于 *this 和 other。</string>
    <string name=":753">---</string>
    <string name="">初始化列表赋值</string>
    <string name="">```c++ concurrent_flat_map&amp; operator=(std::initializer_list<value_type> il); ```</value_type></string>
    <string name="">并发：阻塞于 *this 和 other。\n从初始化列表赋值。销毁所有先前存在的元素。</string>
    <string name="">要求：`value_type` 需满足 https://en.cppreference.com/w/cpp/named_req/CopyInsertable[可复制插入^] 要求。并发：阻塞 `*this`。</string>
    <string name=":766">---</string>
    <string name="">访问操作</string>
    <string name="">[c]visit</string>
    <string name="">```c++ template&lt;class f=\"\"&gt; size_t visit(const key_type&amp;amp; k, F f); template&lt;class f=\"\"&gt; size_t visit(const key_type&amp;amp; k, F f) const; template&lt;class f=\"\"&gt; size_t cvisit(const key_type&amp;amp; k, F f) const; template&lt;class k,=\"\" class=\"\" f=\"\"&gt; size_t visit(const K&amp;amp; k, F f); template&lt;class k,=\"\" class=\"\" f=\"\"&gt; size_t visit(const K&amp;amp; k, F f) const; template&lt;class k,=\"\" class=\"\" f=\"\"&gt; size_t cvisit(const K&amp;amp; k, F f) const; ```&lt;/class&gt;&lt;/class&gt;&lt;/class&gt;&lt;/class&gt;&lt;/class&gt;&lt;/class&gt;</string>
    <string name="">若存在键与 k 等价的元素 x，则以 x 的引用调用函数 f。\n当且仅当当前容器 *this 为常量（const）时，该引用为常量引用。</string>
    <string name="">返回值：访问过的元素数量（0 或 1）。\n注意：template&lt;class k,=\"\" class=\"\" f=\"\"&gt; 形式的重载仅在 Hash::is_transparent 与 Pred::is_transparent 为合法成员别名时才参与重载决议。\n库假定 Hash 可同时用于 K 类型与 Key 类型，且 Pred 是透明的。\n这支持异构查找，避免了实例化 Key 类型对象带来的开销。&lt;/class&gt;</string>
    <string name=":788">---</string>
    <string name="">批量访问</string>
    <string name="">```c++ template&lt;class fwditerator,=\"\" class=\"\" f=\"\"&gt; size_t visit(FwdIterator first, FwdIterator last, F f); template&lt;class fwditerator,=\"\" class=\"\" f=\"\"&gt; size_t visit(FwdIterator first, FwdIterator last, F f) const; template&lt;class fwditerator,=\"\" class=\"\" f=\"\"&gt; size_t cvisit(FwdIterator first, FwdIterator last, F f) const; ```&lt;/class&gt;&lt;/class&gt;&lt;/class&gt;</string>
    <string name="">对范围 [first, last) 中的每个键 k：\n如果容器中存在键与 k 等价的元素 x，则以 x 的引用调用函数 f。\n当且仅当当前容器 *this 为常量（const）时，该引用为常量引用。</string>
    <string name="">尽管功能上等价于对每个键单独调用 [c]visit，但批量访问因内部流线型优化，通常性能更高。\n建议 std::distance(first,last) 至少达到 bulk_visit_size 阈值时再使用，以获得性能提升；超过该大小后，性能不会进一步提升。</string>
    <string name="">要求：`FwdIterator` 需满足 https://en.cppreference.com/w/cpp/named_req/ForwardIterator[遗留向前迭代器^] 要求（{cpp}11 至 {cpp}17），或满足 https://en.cppreference.com/w/cpp/iterator/forward_iterator[`std::forward_iterator`^] 要求（{cpp}20 及更高版本）。对于 `K = std::iterator_traits<fwditerator>::value_type`，要么 `K` 是 `key_type`，要么 `Hash::is_transparent` 和 `Pred::is_transparent` 是有效的成员 typedef。在后一种情况下，库假定 `Hash` 可同时以 `K` 和 `Key` 调用，且 `Pred` 是透明的。该机制支持异构查找，从而避免实例化 `Key` 类型的开销。返回：被访问的元素数量。</fwditerator></string>
    <string name=":824">---</string>
    <string name="">[c]visit_all</string>
    <string name="">```c++ template<class f=""> size_t visit_all(F f); template<class f=""> size_t visit_all(F f) const; template<class f=""> size_t cvisit_all(F f) const; ```</class></class></class></string>
    <string name="">依次以表中每个元素的引用调用函数 f。\n当且仅当当前容器 *this 为常量（const）时，该引用为常量引用。</string>
    <string name="">返回值：访问到的元素数量。</string>
    <string name=":840">---</string>
    <string name="">"并行  [c]visit_all"</string>
    <string name="">```c++ template&lt;class executionpolicy,=\"\" class=\"\" f=\"\"&gt; void visit_all(ExecutionPolicy&amp;amp;&amp;amp; policy, F f); template&lt;class executionpolicy,=\"\" class=\"\" f=\"\"&gt; void visit_all(ExecutionPolicy&amp;amp;&amp;amp; policy, F f) const; template&lt;class executionpolicy,=\"\" class=\"\" f=\"\"&gt; void cvisit_all(ExecutionPolicy&amp;amp;&amp;amp; policy, F f) const; ```&lt;/class&gt;&lt;/class&gt;&lt;/class&gt;</string>
    <string name="">以表中每个元素的引用调用函数 f。\n当且仅当当前容器 *this 为常量（const）时，该引用为常量引用。\n执行过程将根据指定的执行策略语义进行并行化。</string>
    <string name="">抛出异常：根据所使用执行策略的异常处理机制，如果 f 内部抛出异常，则可能会调用 std::terminate。\n注意：仅在支持 C++17 并行算法的编译器中可用。\n仅当 std::is_execution_policy_v&lt;std::remove_cvref_t&lt;executionpolicy&gt;&amp;gt; 为 true 时，这些重载版本才参与重载决议。\n不允许使用无序执行策略。&lt;/std::remove_cvref_t&lt;executionpolicy&gt;</string>
    <string name=":861">---</string>
    <string name="">[c]visit_while</string>
    <string name="">```c++ template<class f=""> bool visit_while(F f); template<class f=""> bool visit_while(F f) const; template<class f=""> bool cvisit_while(F f) const; ```</class></class></class></string>
    <string name="">依次以表中每个元素的引用调用函数 f，直到 f 返回 false 或遍历完所有元素。\n当且仅当当前容器 *this 为常量（const）时，该元素引用为常量引用。</string>
    <string name="">返回值：当且仅当 f 曾返回 false 时，整体返回 false。</string>
    <string name=":878">---</string>
    <string name="">"并行  [c]visit_while"</string>
    <string name="">```c++ template&lt;class executionpolicy,=\"\" class=\"\" f=\"\"&gt; bool visit_while(ExecutionPolicy&amp;amp;&amp;amp; policy, F f); template&lt;class executionpolicy,=\"\" class=\"\" f=\"\"&gt; bool visit_while(ExecutionPolicy&amp;amp;&amp;amp; policy, F f) const; template&lt;class executionpolicy,=\"\" class=\"\" f=\"\"&gt; bool cvisit_while(ExecutionPolicy&amp;amp;&amp;amp; policy, F f) const; ```&lt;/class&gt;&lt;/class&gt;&lt;/class&gt;</string>
    <string name="">以表中每个元素的引用调用函数 f，直到 f 返回 false 或遍历完所有元素。\n当且仅当当前容器 *this 为常量（const）时，该元素引用为常量引用。\n执行过程将根据指定的执行策略语义进行并行化。</string>
    <string name="">返回值：当且仅当 f 曾返回 false 时，整体返回 false。\n抛出异常：根据所使用执行策略的异常处理机制，如果 f 内部抛出异常，则可能会调用 std::terminate。\n注意：\n仅在支持 C++17 并行算法的编译器中可用。\n仅当 std::is_execution_policy_v&lt;std::remove_cvref_t&lt;executionpolicy&gt;&amp;gt; 为 true 时，这些重载版本才参与重载决议。\n不允许使用无序执行策略。\n并行化意味着：即使 f 已返回 false，执行流程也不一定会立即终止；因此，f 可能还会被继续调用以处理后续元素，且这些调用同样可能返回 false。&lt;/std::remove_cvref_t&lt;executionpolicy&gt;</string>
    <string name=":905">---</string>
    <string name="">大小与容量</string>
    <string name="">空</string>
    <string name="">```c++ [[nodiscard]] bool empty() const noexcept; ```</string>
    <string name="">返回值：size() == 0</string>
    <string name=":918">---</string>
    <string name="">大小</string>
    <string name="">```c++ size_type size() const noexcept; ```</string>
    <string name="">返回值：表中的元素数量。</string>
    <string name="">注意：在存在并发插入操作时，返回的值可能无法准确反映函数执行后容器的真实大小。</string>
    <string name=":933">---</string>
    <string name="">max_size</string>
    <string name="">```c++ size_type max_size() const noexcept; ```</string>
    <string name="">返回值：容器所能容纳的最大元素数量（最大容量）。</string>
    <string name=":944">---</string>
    <string name="">修改器</string>
    <string name="">原地构造</string>
    <string name="">```c++ template<class... args=""> bool emplace(Args&amp;&amp;... args); ```</class...></string>
    <string name="">当且仅当容器中不存在等价键的元素时，才会使用参数 args 构造对象并插入到容器中。</string>
    <string name="">要求：`value_type` 可从 `args` 构造。返回：若执行了插入则返回 `true`。并发：在 `*this` 的 rehash 操作上阻塞。注意：如果执行了 rehash，则指向元素的指针和引用会失效。+ +若 `args...` 的形式为 `k,v`，则仅在确定应插入元素时才构造整个对象，检查时仅使用 `k` 参数。</string>
    <string name=":963">---</string>
    <string name="">复制插入</string>
    <string name="">```c++ bool insert(const value_type&amp; obj); bool insert(const init_type&amp; obj); ```</string>
    <string name=":971">当且仅当容器中不存在等价键的元素时，才将对象 obj 插入到容器中。</string>
    <string name="">要求：`value_type` 需满足 https://en.cppreference.com/w/cpp/named_req/CopyInsertable[可复制插入^] 要求。返回：若执行了插入则返回 `true`。并发：在 `*this` 的 rehash 操作上阻塞。注意：如果执行了 rehash，则指向元素的指针和引用会失效。+ +形式为 `insert(x)` 的调用（其中 `x` 可同等转换为 `const value_type&amp;` 和 `const init_type&amp;`）不会产生歧义，并且会选择 `init_type` 重载。</string>
    <string name=":981">---</string>
    <string name="">移动插入</string>
    <string name="">```c++ bool insert(value_type&amp;&amp; obj); bool insert(init_type&amp;&amp; obj); ```</string>
    <string name=":989">当且仅当容器中无等价键的元素时，将对象 obj 插入容器。</string>
    <string name="">要求：`value_type` 需满足 https://en.cppreference.com/w/cpp/named_req/MoveInsertable[可移动插入^] 要求。返回：若执行了插入则返回 `true`。并发：在 `*this` 的 rehash 操作上阻塞。注意：如果执行了 rehash，则指向元素的指针和引用会失效。+ +形式为 `insert(x)` 的调用（其中 `x` 可同等转换为 `value_type&amp;&amp;` 和 `init_type&amp;&amp;`）不会产生歧义，并且会选择 `init_type` 重载。</string>
    <string name=":999">---</string>
    <string name="">迭代器范围插入</string>
    <string name="">```c++ template<class inputiterator=""> size_type insert(InputIterator first, InputIterator last); ```</class></string>
    <string name=":1006">等效于 [listing,subs=\"+macros,+quotes\"]</string>
    <string name=":1013">返回值：成功插入的元素数量。</string>
    <string name=":1015">---</string>
    <string name="">初始化列表插入</string>
    <string name="">```c++ size_type insert(std::initializer_list<value_type> il); ```</value_type></string>
    <string name=":1022">等效于 [listing,subs=\"+macros,+quotes\"]</string>
    <string name=":1029">返回值：插入的元素个数。</string>
    <string name=":1031">---</string>
    <string name="">emplace_or_[c]visit</string>
    <string name="">```c++ template&lt;class... args,=\"\" class=\"\" f=\"\"&gt; bool emplace_or_visit(Args&amp;amp;&amp;amp;... args, F&amp;amp;&amp;amp; f); template&lt;class... args,=\"\" class=\"\" f=\"\"&gt; bool emplace_or_cvisit(Args&amp;amp;&amp;amp;... args, F&amp;amp;&amp;amp; f); ```&lt;/class...&gt;&lt;/class...&gt;</string>
    <string name="">若容器中无等价键的元素，则使用参数 args 构造对象并插入容器；\n否则，将等价元素的引用传递给函数 f 并调用 —— 若使用的是 emplace_or_cvisit，则该引用为常量引用。</string>
    <string name="">要求：`value_type` 可从 `args` 构造。返回：若执行了插入则返回 `true`。并发：在 `*this` 的 rehash 操作上阻塞。注意：如果执行了 rehash，则指向元素的指针和引用会失效。+ +该接口仅为展示说明，因为 C++ 不允许在变参参数包之后声明参数 `f`。</string>
    <string name=":1050">---</string>
    <string name="">Copy insert_or_[c]visit</string>
    <string name="">```c++ template<class f=""> bool insert_or_visit(const value_type&amp; obj, F f); template<class f=""> bool insert_or_cvisit(const value_type&amp; obj, F f); template<class f=""> bool insert_or_visit(const init_type&amp; obj, F f); template<class f=""> bool insert_or_cvisit(const init_type&amp; obj, F f); ```</class></class></class></class></string>
    <string name=":1060">当且仅当容器中不存在等价键的元素时，将对象 obj 插入容器；\n否则，将等价元素的引用传入函数 f 并调用 ——若使用的是 *_cvisit 重载版本，该引用为常量引用。</string>
    <string name="">要求：`value_type` 需满足 https://en.cppreference.com/w/cpp/named_req/CopyInsertable[可复制插入^] 要求。返回：若执行了插入则返回 `true`。并发：在 `*this` 的 rehash 操作上阻塞。注意：如果执行了 rehash，则指向元素的指针和引用会失效。+ +在形式为 `insert_or_[c]visit(obj, f)` 的调用中，接受 `const value_type&amp;amp;` 参数的重载仅当 `std::remove_cv&lt;std::remove_reference&lt;decltype(obj)&gt;::type&amp;gt;::type` 为 `value_type` 时才参与重载决议。&lt;/std::remove_reference&lt;decltype(obj)&gt;</string>
    <string name=":1072">---</string>
    <string name="">Move insert_or_[c]visit</string>
    <string name="">```c++ template<class f=""> bool insert_or_visit(value_type&amp;&amp; obj, F f); template<class f=""> bool insert_or_cvisit(value_type&amp;&amp; obj, F f); template<class f=""> bool insert_or_visit(init_type&amp;&amp; obj, F f); template<class f=""> bool insert_or_cvisit(init_type&amp;&amp; obj, F f); ```</class></class></class></class></string>
    <string name=":1082">当且仅当容器中无等价键的元素时，插入对象 obj；\n否则，以等价元素的引用调用函数 f ——若使用 *_cvisit 重载版本，该引用为常量引用。</string>
    <string name="">要求：value_type 满足 https://en.cppreference.com/w/cpp/named_req/MoveInsertable[可移动插入] 要求。\n返回值：插入成功则返回 true。\n并发：在当前对象 *this 执行重哈希期间阻塞。\n说明：触发重哈希时，会使指向元素的指针和引用失效。\n调用形式为 insert_or_[c]visit(obj, f) 时，仅当 std::remove_reference&lt;decltype(obj)&gt;::type 类型为 value_type，接收 value_type&amp;amp;&amp;amp; 参数的重载函数才会参与重载决议。&lt;/decltype(obj)&gt;</string>
    <string name=":1094">---</string>
    <string name="">迭代器范围插入或访问</string>
    <string name="">```c++ template&lt;class inputiterator,class=\"\" f=\"\"&gt; size_type insert_or_visit(InputIterator first, InputIterator last, F f); template&lt;class inputiterator,class=\"\" f=\"\"&gt; size_type insert_or_cvisit(InputIterator first, InputIterator last, F f); ```&lt;/class&gt;&lt;/class&gt;</string>
    <string name=":1104">等效于 [listing,subs=\"+macros,+quotes\"]</string>
    <string name=":1111">返回值：插入的元素数量。</string>
    <string name=":1113">---</string>
    <string name="">初始化列表插入或访问</string>
    <string name="">```c++ template<class f=""> size_type insert_or_visit(std::initializer_list<value_type> il, F f); template<class f=""> size_type insert_or_cvisit(std::initializer_list<value_type> il, F f); ```</value_type></class></value_type></class></string>
    <string name=":1121">等效于 [listing,subs=\"+macros,+quotes\"]</string>
    <string name=":1128">返回值：插入的元素个数。</string>
    <string name=":1130">---</string>
    <string name="">emplace_and_[c]visit</string>
    <string name="">```c++ template&lt;class... args,=\"\" class=\"\" f1,=\"\" f2=\"\"&gt; bool emplace_and_visit(Args&amp;amp;&amp;amp;... args, F1&amp;amp;&amp;amp; f1, F2&amp;amp;&amp;amp; f2); template&lt;class... args,=\"\" class=\"\" f1,=\"\" f2=\"\"&gt; bool emplace_and_cvisit(Args&amp;amp;&amp;amp;... args, F1&amp;amp;&amp;amp; f1, F2&amp;amp;&amp;amp; f2); ```&lt;/class...&gt;&lt;/class...&gt;</string>
    <string name="">若容器中无等价键的元素，则使用参数args构造对象并插入容器，随后以新创建元素的非常量引用调用f1；\n否则，以等价元素的引用调用f2；若使用emplace_and_cvisit，则该引用为常量引用。</string>
    <string name="">要求：`value_type` 可从 `args` 构造。返回：若执行了插入则返回 `true`。并发：在 `*this` 的 rehash 操作上阻塞。注意：如果执行了 rehash，则指向元素的指针和引用会失效。+ +该接口仅为展示说明，因为 C++ 不允许在变参参数包之后声明参数 `f1` 和 `f2`。</string>
    <string name=":1152">---</string>
    <string name="">"复制  insert_and_[c]visit"</string>
    <string name="">```c++ template&lt;class f1,=\"\" class=\"\" f2=\"\"&gt; bool insert_and_visit(const value_type&amp;amp; obj, F1 f1, F2 f2); template&lt;class f1,=\"\" class=\"\" f2=\"\"&gt; bool insert_and_cvisit(const value_type&amp;amp; obj, F1 f1, F2 f2); template&lt;class f1,=\"\" class=\"\" f2=\"\"&gt; bool insert_and_visit(const init_type&amp;amp; obj, F1 f1, F2 f2); template&lt;class f1,=\"\" class=\"\" f2=\"\"&gt; bool insert_and_cvisit(const init_type&amp;amp; obj, F1 f1, F2 f2); ```&lt;/class&gt;&lt;/class&gt;&lt;/class&gt;&lt;/class&gt;</string>
    <string name=":1162">当且仅当容器中不存在等价键的元素时，插入obj，随后以新创建元素的非常量引用调用f1；\n否则，以等价元素的引用调用f2；若使用*_cvisit重载版本，则该引用为常量引用。</string>
    <string name="">要求：`value_type` 需满足 https://en.cppreference.com/w/cpp/named_req/CopyInsertable[可复制插入^] 要求。返回：若执行了插入则返回 `true`。并发：在 `*this` 的 rehash 操作上阻塞。注意：如果执行了 rehash，则指向元素的指针和引用会失效。+ +在形式为 `insert_and_[c]visit(obj, f1, f2)` 的调用中，接受 `const value_type&amp;amp;` 参数的重载仅当 `std::remove_cv&lt;std::remove_reference&lt;decltype(obj)&gt;::type&amp;gt;::type` 为 `value_type` 时才参与重载决议。&lt;/std::remove_reference&lt;decltype(obj)&gt;</string>
    <string name=":1175">---</string>
    <string name="">移动 insert_and_[c]visit</string>
    <string name="">```c++ template&lt;class f1,=\"\" class=\"\" f2=\"\"&gt; bool insert_and_visit(value_type&amp;amp;&amp;amp; obj, F1 f1, F2 f2); template&lt;class f1,=\"\" class=\"\" f2=\"\"&gt; bool insert_and_cvisit(value_type&amp;amp;&amp;amp; obj, F1 f1, F2 f2); template&lt;class f1,=\"\" class=\"\" f2=\"\"&gt; bool insert_and_visit(init_type&amp;amp;&amp;amp; obj, F1 f1, F2 f2); template&lt;class f1,=\"\" class=\"\" f2=\"\"&gt; bool insert_and_cvisit(init_type&amp;amp;&amp;amp; obj, F1 f1, F2 f2); ```&lt;/class&gt;&lt;/class&gt;&lt;/class&gt;&lt;/class&gt;</string>
    <string name=":1185">当且仅当容器中不存在等价键的元素时，插入obj，随后以新创建元素的非常量引用调用f1；\n否则，以等价元素的引用调用f2；若使用*_cvisit重载版本，则该引用为常量引用。</string>
    <string name="">要求：`value_type` 需满足 https://en.cppreference.com/w/cpp/named_req/MoveInsertable[可移动插入^] 要求。返回：若执行了插入则返回 `true`。并发：在 `*this` 的 rehash 操作上阻塞。注意：如果执行了 rehash，则指向元素的指针和引用会失效。+ +在形式为 `insert_and_[c]visit(obj, f1, f2)` 的调用中，接受 `value_type&amp;amp;&amp;amp;` 参数的重载仅当 `std::remove_reference&lt;decltype(obj)&gt;::type` 为 `value_type` 时才参与重载决议。&lt;/decltype(obj)&gt;</string>
    <string name=":1198">---</string>
    <string name="">迭代器范围插入并访问</string>
    <string name="">```c++ template&lt;class inputiterator,=\"\" class=\"\" f1,=\"\" f2=\"\"&gt; size_type insert_or_visit(InputIterator first, InputIterator last, F1 f1, F2 f2); template&lt;class inputiterator,=\"\" class=\"\" f1,=\"\" f2=\"\"&gt; size_type insert_or_cvisit(InputIterator first, InputIterator last, F1 f1, F2 f2); ```&lt;/class&gt;&lt;/class&gt;</string>
    <string name=":1208">等效于 [listing,subs=\"+macros,+quotes\"]</string>
    <string name=":1215">返回值：插入的元素数量。</string>
    <string name=":1217">---</string>
    <string name="">初始化列表插入并访问</string>
    <string name="">```c++ template&lt;class f1,=\"\" class=\"\" f2=\"\"&gt; size_type insert_and_visit(std::initializer_list&lt;value_type&gt; il, F1 f1, F2 f2); template&lt;class f1,=\"\" class=\"\" f2=\"\"&gt; size_type insert_and_cvisit(std::initializer_list&lt;value_type&gt; il, F1 f1, F2 f2); ```&lt;/value_type&gt;&lt;/class&gt;&lt;/value_type&gt;&lt;/class&gt;</string>
    <string name=":1227">等效于 [listing,subs=\"+macros,+quotes\"]</string>
    <string name=":1234">返回值：插入的元素数量。</string>
    <string name=":1236">---</string>
    <string name="">try_emplace</string>
    <string name="">```c++ template&lt;class... args=\"\"&gt; bool try_emplace(const key_type&amp;amp; k, Args&amp;amp;&amp;amp;... args); template&lt;class... args=\"\"&gt; bool try_emplace(key_type&amp;amp;&amp;amp; k, Args&amp;amp;&amp;amp;... args); template&lt;class k,=\"\" class...=\"\" args=\"\"&gt; bool try_emplace(K&amp;amp;&amp;amp; k, Args&amp;amp;&amp;amp;... args); ```&lt;/class&gt;&lt;/class...&gt;&lt;/class...&gt;</string>
    <string name="">若容器中不存在键为k的元素，则将由k和args构造的元素插入容器。</string>
    <string name="">返回值：插入成功则返回true。\n并发：对当前对象*this进行重哈希时阻塞。\n说明：该函数与 xref:#concurrent_flat_map_emplace [emplace] 类似，区别在于若存在等价键的元素，则不会构造value_type；否则，构造形式为：</string>
    <string name=":1256">value_type(std::piecewise_construct, std::forward_as_tuple(std::forward<key>(k)), std::forward_as_tuple(std::forward<args>(args)...))</args></key></string>
    <string name=":1261">value_type(std::piecewise_construct, std::forward_as_tuple(std::forward<k>(k)), std::forward_as_tuple(std::forward<args>(args)...)) ```</args></k></string>
    <string name="">这与 xref:#concurrent_flat_map_emplace [emplace] 不同，后者仅将所有参数转发给value_type的构造函数。</string>
    <string name=":1268">Invalidates pointers and references to elements if a rehashing is issued.</string>
    <string name="">若`Hash::is_transparent`与`Pred::is_transparent`为合法的成员类型别名，则`template&lt;class k,=\"\" args=\"\"&gt;`重载版本才会参与重载决议。库假定`Hash`可同时接收`K`与`Key`类型参数调用，且`Pred`为透明比较器。该设计支持异构查找，避免了实例化`Key`类型对象的开销。&lt;/class&gt;</string>
    <string name=":1272">--</string>
    <string name=":1274">---</string>
    <string name="">try_emplace_or_[c]visit</string>
    <string name="">```c++ template&lt;class... args,=\"\" class=\"\" f=\"\"&gt; bool try_emplace_or_visit(const key_type&amp;amp; k, Args&amp;amp;&amp;amp;... args, F&amp;amp;&amp;amp; f); template&lt;class... args,=\"\" class=\"\" f=\"\"&gt; bool try_emplace_or_cvisit(const key_type&amp;amp; k, Args&amp;amp;&amp;amp;... args, F&amp;amp;&amp;amp; f); template&lt;class... args,=\"\" class=\"\" f=\"\"&gt; bool try_emplace_or_visit(key_type&amp;amp;&amp;amp; k, Args&amp;amp;&amp;amp;... args, F&amp;amp;&amp;amp; f); template&lt;class... args,=\"\" class=\"\" f=\"\"&gt; bool try_emplace_or_cvisit(key_type&amp;amp;&amp;amp; k, Args&amp;amp;&amp;amp;... args, F&amp;amp;&amp;amp; f); template&lt;class k,=\"\" class...=\"\" args,=\"\" class=\"\" f=\"\"&gt; bool try_emplace_or_visit(K&amp;amp;&amp;amp; k, Args&amp;amp;&amp;amp;... args, F&amp;amp;&amp;amp; f); template&lt;class k,=\"\" class...=\"\" args,=\"\" class=\"\" f=\"\"&gt; bool try_emplace_or_cvisit(K&amp;amp;&amp;amp; k, Args&amp;amp;&amp;amp;... args, F&amp;amp;&amp;amp; f); ```&lt;/class&gt;&lt;/class&gt;&lt;/class...&gt;&lt;/class...&gt;&lt;/class...&gt;&lt;/class...&gt;</string>
    <string name="">若容器中不存在键为`k`的元素，则将由`k`和`args`构造的元素插入容器。否则，以等价元素的引用调用`f`；若使用`*_cvisit`重载版本，则该引用为常量引用。</string>
    <string name=":1296">返回值：插入成功则返回true。\n并发：对当前对象*this进行重哈希时阻塞。\n说明：若存在等价键的元素，则不会构造value_type；否则，构造形式为：</string>
    <string name=":1304">value_type(std::piecewise_construct, std::forward_as_tuple(std::forward<key>(k)), std::forward_as_tuple(std::forward<args>(args)...))</args></key></string>
    <string name=":1309">value_type(std::piecewise_construct, std::forward_as_tuple(std::forward<k>(k)), std::forward_as_tuple(std::forward<args>(args)...)) ```</args></k></string>
    <string name=":1314">若执行重哈希操作，将使指向元素的指针和引用失效。</string>
    <string name="">该接口仅为说明性用途，因为C++不允许在可变参数包之后声明参数`f`。</string>
    <string name="">若`Hash::is_transparent`和`Pred::is_transparent`是有效的成员类型别名，则`template&lt;class k,=\"\" args,=\"\" class=\"\" f=\"\"&gt;`重载版本才会参与重载决议。库假定`Hash`可同时接受`K`与`Key`类型的参数调用，且`Pred`是透明的。这支持异构查找，避免了实例化`Key`类型对象的开销。&lt;/class&gt;</string>
    <string name=":1320">--</string>
    <string name=":1322">---</string>
    <string name="">try_emplace_and_[c]visit</string>
    <string name="">```c++ template&lt;class... args,=\"\" class=\"\" f1,=\"\" f2=\"\"&gt; bool try_emplace_and_visit(const key_type&amp;amp; k, Args&amp;amp;&amp;amp;... args, F1&amp;amp;&amp;amp; f1, F2&amp;amp;&amp;amp; f2); template&lt;class... args,=\"\" class=\"\" f1,=\"\" f2=\"\"&gt; bool try_emplace_and_cvisit(const key_type&amp;amp; k, Args&amp;amp;&amp;amp;... args, F1&amp;amp;&amp;amp; f1, F2&amp;amp;&amp;amp; f2); template&lt;class... args,=\"\" class=\"\" f1,=\"\" f2=\"\"&gt; bool try_emplace_and_visit(key_type&amp;amp;&amp;amp; k, Args&amp;amp;&amp;amp;... args, F1&amp;amp;&amp;amp; f1, F2&amp;amp;&amp;amp; f2); template&lt;class... args,=\"\" class=\"\" f1,=\"\" f2=\"\"&gt; bool try_emplace_and_cvisit(key_type&amp;amp;&amp;amp; k, Args&amp;amp;&amp;amp;... args, F1&amp;amp;&amp;amp; f1, F2&amp;amp;&amp;amp; f2); template&lt;class k,=\"\" class...=\"\" args,=\"\" class=\"\" f1,=\"\" f2=\"\"&gt; bool try_emplace_and_visit(K&amp;amp;&amp;amp; k, Args&amp;amp;&amp;amp;... args, F1&amp;amp;&amp;amp; f1, F2&amp;amp;&amp;amp; f2); template&lt;class k,=\"\" class...=\"\" args,=\"\" class=\"\" f1,=\"\" f2=\"\"&gt; bool try_emplace_and_cvisit(K&amp;amp;&amp;amp; k, Args&amp;amp;&amp;amp;... args, F1&amp;amp;&amp;amp; f1, F2&amp;amp;&amp;amp; f2); ```&lt;/class&gt;&lt;/class&gt;&lt;/class...&gt;&lt;/class...&gt;&lt;/class...&gt;&lt;/class...&gt;</string>
    <string name="">若容器中不存在键为`k`的元素，则将由`k`和`args`构造的元素插入容器，随后以新创建元素的非常量引用调用`f1`；\n否则，以等价元素的引用调用`f2`；若使用`*_cvisit`重载版本，则该引用为常量引用。</string>
    <string name=":1345">返回值：插入成功则返回true。\n并发：对当前对象*this进行重哈希时阻塞。\n说明：若存在等价键的元素，则不会构造value_type；否则，构造形式为：</string>
    <string name=":1353">value_type(std::piecewise_construct, std::forward_as_tuple(std::forward<key>(k)), std::forward_as_tuple(std::forward<args>(args)...))</args></key></string>
    <string name=":1358">value_type(std::piecewise_construct, std::forward_as_tuple(std::forward<k>(k)), std::forward_as_tuple(std::forward<args>(args)...)) ```</args></k></string>
    <string name=":1363">若执行重哈希操作，将使指向元素的指针和引用失效。</string>
    <string name="">该接口仅为说明性用途，因为C++不允许在可变参数包之后声明`f1`和`f2`参数。</string>
    <string name="">若`Hash::is_transparent`和`Pred::is_transparent`是有效的成员类型别名，则`template&lt;class k,=\"\" args,=\"\" class=\"\" f1,=\"\" f2=\"\"&gt;`重载版本才会参与重载决议。库假定`Hash`可同时接受`K`与`Key`类型的参数调用，且`Pred`是透明的。这支持异构查找，避免了实例化`Key`类型对象的开销。&lt;/class&gt;</string>
    <string name=":1369">--</string>
    <string name=":1371">---</string>
    <string name="">insert_or_assign</string>
    <string name="">```c++ template&lt;class m=\"\"&gt; bool insert_or_assign(const key_type&amp;amp; k, M&amp;amp;&amp;amp; obj); template&lt;class m=\"\"&gt; bool insert_or_assign(key_type&amp;amp;&amp;amp; k, M&amp;amp;&amp;amp; obj); template&lt;class k,=\"\" class=\"\" m=\"\"&gt; bool insert_or_assign(K&amp;amp;&amp;amp; k, M&amp;amp;&amp;amp; obj); ```&lt;/class&gt;&lt;/class&gt;&lt;/class&gt;</string>
    <string name="">向容器插入新元素，或通过赋值给容器内已存值来更新现有元素。</string>
    <string name="">若容器中存在键为`k`的元素，则通过`std::forward<m>(obj)`赋值来更新该元素。</m></string>
    <string name="">若不存在该元素，则将其以如下形式添加到容器中：</string>
    <string name="">value_type(std::piecewise_construct, std::forward_as_tuple(std::forward<key>(k)), std::forward_as_tuple(std::forward<m>(obj)))</m></key></string>
    <string name="">value_type(std::piecewise_construct, std::forward_as_tuple(std::forward<k>(k)), std::forward_as_tuple(std::forward<m>(obj))) ```</m></k></string>
    <string name="">返回值：插入成功时返回`true`。\n并发：执行重哈希操作时会阻塞当前对象`*this`。\n说明：若触发重哈希，将使指向元素的指针和引用失效。\n`template&lt;class k,=\"\" class=\"\" m=\"\"&gt;` 仅当 `Hash::is_transparent` 和 `Pred::is_transparent` 为有效成员类型别名时才参与重载决议。库假定`Hash`可同时接受`K`与`Key`类型参数调用，且`Pred`是透明的。这支持异构查找，避免了实例化`Key`类型对象的开销。&lt;/class&gt;</string>
    <string name=":1404">---</string>
    <string name="">擦除</string>
    <string name="">```c++ size_type erase(const key_type&amp; k); template<class k=""> size_type erase(const K&amp; k); ```</class></string>
    <string name="">若存在键等价于`k`的元素，则删除该元素。</string>
    <string name="">返回值：删除的元素数量（0 或 1）。\n异常：仅当哈希函数`hasher`或键比较函数`key_equal`抛出异常时才会抛出异常。\n说明：仅当`Hash::is_transparent`和`Pred::is_transparent`为有效的成员类型别名时，`template<class k="">`重载版本才参与重载决议。库假定`Hash`可同时接受`K`与`Key`类型的参数调用，且`Pred`是透明的。该设计支持异构查找，避免了实例化`Key`类型对象的开销。</class></string>
    <string name=":1419">---</string>
    <string name="">erase_if by Key</string>
    <string name="">```c++ template&lt;class f=\"\"&gt; size_type erase_if(const key_type&amp;amp; k, F f); template&lt;class k,=\"\" class=\"\" f=\"\"&gt; size_type erase_if(const K&amp;amp; k, F f); ```&lt;/class&gt;&lt;/class&gt;</string>
    <string name="">若存在键与 `k` 等价的元素 `x`，且 `f(x)` 返回 `true`，则删除该元素。</string>
    <string name="">返回值：删除的元素数量（0 或 1）。\n异常：仅当哈希函数`hasher`、键比较函数`key_equal`或函数`f`抛出异常时才会抛出异常。\n说明：`f`接收元素`x`的非常量引用。\n\n仅当`std::is_execution_policy_v&lt;std::remove_cvref_t&lt;executionpolicy&gt;&amp;gt;`为`false`时，`template&lt;class k,=\"\" class=\"\" f=\"\"&gt;`重载版本才参与重载决议。\n\n仅当`Hash::is_transparent`和`Pred::is_transparent`为有效的成员类型别名时，`template&lt;class k,=\"\" class=\"\" f=\"\"&gt;`重载版本才参与重载决议。库假定`Hash`可同时接受`K`与`Key`类型的参数调用，且`Pred`是透明的。该设计支持异构查找，避免了实例化`Key`类型对象的开销。&lt;/class&gt;&lt;/class&gt;&lt;/std::remove_cvref_t&lt;executionpolicy&gt;</string>
    <string name=":1438">---</string>
    <string name=":1440">erase_if</string>
    <string name="">```c++ template<class f=""> size_type erase_if(F f); ```</class></string>
    <string name="">依次以非常量引用为参数，对容器中的每个元素调用`f`，并删除所有`f`返回`true`的元素。</string>
    <string name="">返回值：被删除的元素数量。\n异常：仅当函数 `f` 抛出异常时才会抛出异常。</string>
    <string name=":1451">---</string>
    <string name="">并行条件擦除</string>
    <string name="">```c++ template&lt;class executionpolicy,=\"\" class=\"\" f=\"\"&gt; void erase_if(ExecutionPolicy&amp;amp;&amp;amp; policy, F f); ```&lt;/class&gt;</string>
    <string name="">依次以非常量引用为参数，对容器中的每个元素调用`f`，并删除所有`f`返回`true`的元素。执行过程将根据指定的执行策略语义进行并行化处理。</string>
    <string name="">异常：根据所使用执行策略的异常处理机制，若`f`内部抛出异常，可能会调用`std::terminate`终止程序。\n说明：仅在支持C++17并行算法的编译器中可用。\n\n仅当`std::is_execution_policy_v&lt;std::remove_cvref_t&lt;executionpolicy&gt;&amp;gt;`为`true`时，该重载版本参与重载决议。\n\n不允许使用无顺序执行策略。&lt;/std::remove_cvref_t&lt;executionpolicy&gt;</string>
    <string name=":1469">---</string>
    <string name="">交换</string>
    <string name="">```c++ void swap(concurrent_flat_map&amp; other) noexcept(boost::allocator_traits<allocator>::is_always_equal::value || boost::allocator_traits<allocator>::propagate_on_container_swap::value); ```</allocator></allocator></string>
    <string name="">将当前容器的内容与参数容器进行交换。</string>
    <string name="">若`Allocator::propagate_on_container_swap`已定义且其值为`true`，则交换两个容器的分配器；否则，使用不相等的分配器进行交换会导致未定义行为。</string>
    <string name="">异常：除非`key_equal`或`hasher`在交换时抛出异常，否则不抛出任何异常。并发：会阻塞当前对象`*this`和参数对象`other`。</string>
    <string name=":1486">---</string>
    <string name="">清空</string>
    <string name="">```c++ void clear() noexcept; ```</string>
    <string name="">清空容器中的所有元素。</string>
    <string name="">后置条件：容器大小 `size() == 0`，且 `max_load() &gt;= max_load_factor() * bucket_count()`\n并发：会阻塞当前对象 `*this`。</string>
    <string name=":1499">---</string>
    <string name="">合并</string>
    <string name="">```c++ template&lt;class h2,=\"\" class=\"\" p2=\"\"&gt; size_type merge(concurrent_flat_map&lt;key, t,=\"\" h2,=\"\" p2,=\"\" allocator=\"\"&gt;&amp;amp; source); template&lt;class h2,=\"\" class=\"\" p2=\"\"&gt; size_type merge(concurrent_flat_map&lt;key, t,=\"\" h2,=\"\" p2,=\"\" allocator=\"\"&gt;&amp;amp;&amp;amp; source); ```&lt;/key,&gt;&lt;/class&gt;&lt;/key,&gt;&lt;/class&gt;</string>
    <string name="">将来源容器`source`中所有**键不存在于当前容器`*this`**中的元素**移动插入**到当前容器，并从`source`中擦除这些元素。</string>
    <string name="">返回值：插入的元素数量。\n并发：会阻塞当前对象 `*this` 和源对象 `source`。</string>
    <string name=":1515">---</string>
    <string name="">观察器</string>
    <string name="">get_allocator</string>
    <string name="">``` allocator_type get_allocator() const noexcept; ```</string>
    <string name="">返回值：容器的分配器。</string>
    <string name=":1527">---</string>
    <string name="">哈希函数</string>
    <string name="">``` hasher hash_function() const; ```</string>
    <string name="">返回值：容器的哈希函数。</string>
    <string name=":1537">---</string>
    <string name="">key_eq</string>
    <string name="">``` key_equal key_eq() const; ```</string>
    <string name="">返回值：容器的键相等性谓词。</string>
    <string name=":1547">---</string>
    <string name="">映射操作</string>
    <string name="">count</string>
    <string name="">```c++ size_type \u0020 \u0020 \u0020 \u0020count(const key_type&amp; k) const; template<class k=""> size_type \u0020 \u0020 \u0020count(const K&amp; k) const; ```</class></string>
    <string name="">返回值：匹配键 `k` 的元素数量（0 或 1）。\n说明：仅当 `Hash::is_transparent` 和 `Pred::is_transparent` 为有效成员类型别名时，`template<class k="">` 重载版本才参与重载决议。库假定哈希函数可同时作用于 `K` 类型与键类型，且相等谓词是透明的，从而支持异构查找，避免实例化键类型带来的开销。\n\n若存在并发插入操作，返回值可能无法精确反映容器执行后的真实状态。</class></string>
    <string name=":1565">---</string>
    <string name="">包含</string>
    <string name="">```c++ bool \u0020 \u0020 \u0020 \u0020 \u0020 \u0020 contains(const key_type&amp; k) const; template<class k=""> bool \u0020 \u0020 \u0020 \u0020 \u0020 contains(const K&amp; k) const; ```</class></string>
    <string name="">返回值：布尔值，表示容器中是否存在键等于 `k` 的元素。\n说明：仅当 `Hash::is_transparent` 和 `Pred::is_transparent` 为有效成员类型别名时，`template<class k="">` 重载版本才参与重载决议。库假定哈希函数可同时作用于 `K` 类型与键类型，且相等谓词是透明的，从而支持异构查找，避免实例化键类型带来的开销。\n\n若存在并发插入操作，返回值可能无法精确反映容器执行后的真实状态。</class></string>
    <string name=":1581">---</string>
    <string name="">桶接口</string>
    <string name="">bucket_count</string>
    <string name="">```c++ size_type bucket_count() const noexcept; ```</string>
    <string name="">返回值：桶数组的大小。</string>
    <string name=":1592">---</string>
    <string name="">哈希策略</string>
    <string name="">负载因子</string>
    <string name="">```c++ float load_factor() const noexcept; ```</string>
    <string name="">返回值：`static_cast<float>(size())/static_cast<float>(bucket_count())`；若 `bucket_count() == 0`，则返回 `0`。</float></float></string>
    <string name=":1604">---</string>
    <string name="">max_load_factor（最大负载因子）</string>
    <string name="">```c++ float max_load_factor() const noexcept; ```</string>
    <string name="">返回值：容器的最大负载因子。</string>
    <string name=":1615">---</string>
    <string name="">设置最大负载因子</string>
    <string name="">```c++ void max_load_factor(float z); ```</string>
    <string name="">效果：无任何操作，用户不允许修改此参数。保留该函数是为了与 `boost::unordered_map` 保持兼容。</string>
    <string name=":1625">---</string>
    <string name="">max_load（最大负载）</string>
    <string name="">```c++ size_type max_load() const noexcept; ```</string>
    <string name="">返回值：容器在不进行重哈希的前提下可容纳的最大元素数量（假定不会再擦除任何元素）。\n说明：容器在构造、重哈希或清空后，其最大负载量至少为 `max_load_factor() * bucket_count()`。在高负载条件下执行擦除操作时，该数值可能会降低。\n若存在并发插入操作，返回值可能无法精确反映容器执行后的真实状态。</string>
    <string name=":1642">---</string>
    <string name="">重哈希</string>
    <string name="">```c++ void rehash(size_type n); ```</string>
    <string name="">效果：必要时调整桶数组的大小，使桶数量至少为 `n`，且负载因子小于等于最大负载因子。\n适用场景下，该操作会**增大或缩小**容器的桶数量 `bucket_count()`。</string>
    <string name="">当容器大小 `size() == 0` 时，调用 `rehash(0)` 会**释放底层的桶数组内存**。</string>
    <string name=":1653">会使指向元素的指针和引用失效，并改变元素的存储顺序。</string>
    <string name="">异常：若抛出异常，函数无任何效果（由容器的哈希函数或比较函数抛出的异常除外）。\n并发：阻塞当前对象 `*this`。</string>
    <string name="">保留</string>
    <string name="">```c++ void reserve(size_type n); ```</string>
    <string name="">等价于 `a.rehash(ceil(n / a.max_load_factor()))`。</string>
    <string name="">与 `rehash` 功能类似，该函数可用于**增大或缩小**容器的桶数量。</string>
    <string name=":1669">会使指向元素的指针和引用失效，并改变元素的存储顺序。</string>
    <string name="">异常：若抛出异常，函数无任何效果（由容器的哈希函数或比较函数抛出的异常除外）。\n并发：阻塞当前对象 `*this`。</string>
    <string name=":1675">---</string>
    <string name="">统计信息</string>
    <string name="">get_stats</string>
    <string name="">```c++ stats get_stats() const; ```</string>
    <string name="">返回值：容器截至目前执行的插入与查找操作的统计描述信息。\n说明：仅当**启用统计计算**时，该函数才可用。</string>
    <string name=":1688">---</string>
    <string name="">reset_stats</string>
    <string name="">```c++ void reset_stats() noexcept; ```</string>
    <string name="">效果：将容器维护的内部统计数据归零。\n说明：仅当**启用统计计算**时，该函数才可用。</string>
    <string name=":1699">---</string>
    <string name="">推导指引</string>
    <string name="">满足以下任一条件时，推导指引不参与重载决议：</string>
    <string name="">- 该推导指引包含 `InputIterator` 模板参数，且为此参数推导出的类型不符合输入迭代器的要求。 - 该推导指引包含 `Allocator` 模板参数，且为该参数推导出的类型不符合分配器要求。 - 该推导指引包含 `Hash` 模板参数，且为该参数推导出的类型为整型或符合分配器要求。 - 该推导指引包含 `Pred` 模板参数，且为该参数推导出的类型符合分配器要求。</string>
    <string name="">推导指引中的 `size++_++type` 参数类型，指向由该推导指引所推导容器类型的 `size++_++type` 成员类型。其默认值与所选构造函数的默认值一致。</string>
    <string name="">_iter-value-type_</string>
    <string name="">__iter-key-type__</string>
    <string name="">__iter-mapped-type__</string>
    <string name="">__iter-to-alloc-type__</string>
    <string name="">相等性比较</string>
    <string name="">operator</string>
    <string name="">```c++ template&lt;class key,=\"\" class=\"\" t,=\"\" hash,=\"\" pred,=\"\" alloc=\"\"&gt; bool operator==(const concurrent_flat_map&lt;key, t,=\"\" hash,=\"\" pred,=\"\" alloc=\"\"&gt;&amp;amp; x, const concurrent_flat_map&lt;key, t,=\"\" hash,=\"\" pred,=\"\" alloc=\"\"&gt;&amp;amp; y); ```&lt;/key,&gt;&lt;/key,&gt;&lt;/class&gt;</string>
    <string name="">若 `x.size() == y.size()`，且对于 `x` 中的每个元素，`y` 中均存在拥有相同键、值相等（使用 `operator==` 比较值类型）的元素，则返回 `true`。</string>
    <string name=":1758">并发：阻塞 `x` 和 `y`。\n说明：若两个容器的相等判断谓词不一致，行为未定义。</string>
    <string name=":1761">---</string>
    <string name="">operator!</string>
    <string name="">```c++ template&lt;class key,=\"\" class=\"\" t,=\"\" hash,=\"\" pred,=\"\" alloc=\"\"&gt; bool operator!=(const concurrent_flat_map&lt;key, t,=\"\" hash,=\"\" pred,=\"\" alloc=\"\"&gt;&amp;amp; x, const concurrent_flat_map&lt;key, t,=\"\" hash,=\"\" pred,=\"\" alloc=\"\"&gt;&amp;amp; y); ```&lt;/key,&gt;&lt;/key,&gt;&lt;/class&gt;</string>
    <string name="">若`x.size() == y.size()`，且`x`中每个元素在`y`中都存在键相同、值相等（使用`operator==`比较值类型）的元素，则返回`false`。</string>
    <string name=":1773">并发：阻塞`x`和`y`。\n说明：若两个容器的相等判定谓词不一致，则行为未定义。</string>
    <string name=":1776">---</string>
    <string name="">交换</string>
    <string name="">```c++ template&lt;class key,=\"\" class=\"\" t,=\"\" hash,=\"\" pred,=\"\" alloc=\"\"&gt; void swap(concurrent_flat_map&lt;key, t,=\"\" hash,=\"\" pred,=\"\" alloc=\"\"&gt;&amp;amp; x, concurrent_flat_map&lt;key, t,=\"\" hash,=\"\" pred,=\"\" alloc=\"\"&gt;&amp;amp; y) noexcept(noexcept(x.swap(y))); ```&lt;/key,&gt;&lt;/key,&gt;&lt;/class&gt;</string>
    <string name=":1786">等价于 [listing,subs=\"+macros,+quotes\"]</string>
    <string name=":1792">---</string>
    <string name=":1794">erase_if</string>
    <string name="">```c++ template&lt;class k,=\"\" class=\"\" t,=\"\" h,=\"\" p,=\"\" a,=\"\" predicate=\"\"&gt; typename concurrent_flat_map&lt;k, t,=\"\" h,=\"\" p,=\"\" a=\"\"&gt;::size_type erase_if(concurrent_flat_map&lt;k, t,=\"\" h,=\"\" p,=\"\" a=\"\"&gt;&amp;amp; c, Predicate pred); ```&lt;/k,&gt;&lt;/k,&gt;&lt;/class&gt;</string>
    <string name=":1801">等价于 [listing,subs=\"+macros,+quotes\"]</string>
    <string name="">序列化</string>
    <string name="">`concurrent++_++flat++_++map` 可通过本组件库提供的 API，借助 link:../../../../../serialization/index.html[Boost.Serialization] 进行归档/检索。支持常规归档与 XML 归档两种格式。</string>
    <string name="">将concurrent++_++flat++_++map保存到归档</string>
    <string name="">将 `concurrent++_++flat++_++map` 容器 `x` 的所有元素保存到归档（XML归档） `ar` 中。</string>
    <string name="">要求：`std::remove_const<key_type>::type` 和 `std::remove_const<mapped_type>::type` 必须是可序列化的（支持 XML 序列化），并且它们支持 Boost.Serialization 的 `save_construct_data` / `load_construct_data` 协议（https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[可默认构造^] 类型自动支持该协议）。并发：阻塞 `x`。</mapped_type></key_type></string>
    <string name=":1825">---</string>
    <string name="">从归档加载concurrent++_++flat++_++map</string>
    <string name="">删除 `concurrent++_++flat++_++map` 容器 `x` 中所有已存在的元素，并从归档（XML 归档） `ar` 中插入原始 `concurrent++_++flat++_++map` 容器 `other` 的元素副本，这些副本是从 `ar` 所读取的存储中恢复的。</string>
    <string name="">要求;; `x.key++_++equal()` 需要在功能上等价于 `other.key++_++equal()` 。 并发性;; 阻塞于 `x` 。</string>
</resources>
