concurrent_unordered_multiset 类
concurrent_unordered_multiset
类是一个并发安全容器,它控制 K 类型元素的可变长度序列。该序列以支持并发安全追加、元素访问、迭代器访问和迭代器遍历操作的方式表示。 在这里,并发安全意味着指针或迭代器始终有效。 它不保证元素初始化或特定的遍历顺序。
语法
template <typename K,
typename _Hasher = std::hash<K>,
typename key_equality = std::equal_to<K>,
typename _Allocator_type = std::allocator<K>
>,
typename key_equality = std::equal_to<K>,
typename _Allocator_type = std::allocator<K>> class concurrent_unordered_multiset : public details::_Concurrent_hash<details::_Concurrent_unordered_set_traits<K,
details::_Hash_compare<K,
_Hasher,
key_equality>,
_Allocator_type,
true>>;
参数
K
键类型。
_Hasher
哈希函数对象类型。 此参数为可选参数,默认值为 std::hash<K>
。
key_equality
相等比较函数对象类型。 此参数为可选参数,默认值为 std::equal_to<K>
。
_Allocator_type
一种表示存储的分配器对象的类型,该分配器对象封装有关并发向量的内存分配和解除分配的详细信息。 此参数为可选参数,默认值为 std::allocator<K>
。
成员
公共 Typedef
名称 | 描述 |
---|---|
allocator_type |
用于管理存储的分配器的类型。 |
const_iterator |
受控序列的常量迭代器的类型。 |
const_local_iterator |
受控序列的常量存储桶迭代器的类型。 |
const_pointer |
元素的常量指针的类型。 |
const_reference |
元素的常量引用的类型。 |
difference_type |
两个元素间的带符号距离的类型。 |
hasher |
哈希函数的类型。 |
iterator |
受控序列的迭代器的类型。 |
key_equal |
比较函数的类型。 |
key_type |
排序键的类型。 |
local_iterator |
受控序列的存储桶迭代器的类型。 |
pointer |
指向元素的指针的类型。 |
reference |
元素的引用的类型。 |
size_type |
两个元素间的无符号距离的类型。 |
value_type |
元素的类型。 |
公共构造函数
名称 | 描述 |
---|---|
concurrent_unordered_multiset | 已重载。 构造并发无序多集。 |
公共方法
名称 | 描述 |
---|---|
hash_function | 返回存储的哈希函数对象。 |
insert | 已重载。 向 concurrent_unordered_multiset 对象添加元素。 |
key_eq | 存储的相等比较函数对象。 |
swap | 交换两个 concurrent_unordered_multiset 对象的内容。 此方法不是并发安全方法。 |
unsafe_erase | 已重载。 从 concurrent_unordered_multiset 中的指定位置移除元素。 此方法不是并发安全方法。 |
公共运算符
“属性” | 描述 |
---|---|
operator= | 已重载。 将另一 concurrent_unordered_multiset 对象的内容分配给此对象。 此方法不是并发安全方法。 |
注解
有关 concurrent_unordered_multiset
类的详细信息,请参阅并行容器和对象。
继承层次结构
_Traits
_Concurrent_hash
concurrent_unordered_multiset
要求
标头:concurrent_unordered_set.h
命名空间: 并发
begin
返回指向并发容器中第一个元素的迭代器。 此方法是并发安全的。
iterator begin();
const_iterator begin() const;
返回值
并发容器中第一个元素的迭代器。
cbegin
返回指向并发容器中第一个元素的 const 迭代器。 此方法是并发安全的。
const_iterator cbegin() const;
返回值
指向并发容器中第一个元素的 const 迭代器。
cend
返回一个 const 迭代器,指向并发容器中最后一个元素之后的位置。 此方法是并发安全的。
const_iterator cend() const;
返回值
一个 const 迭代器,指向并发容器中最后一个元素之后的位置。
clear
擦除并发容器中的所有元素。 此函数不是并发安全的。
void clear();
concurrent_unordered_multiset
构造并发无序多集。
explicit concurrent_unordered_multiset(
size_type _Number_of_buckets = 8,
const hasher& _Hasher = hasher(),
const key_equal& key_equality = key_equal(),
const allocator_type& _Allocator = allocator_type());
concurrent_unordered_multiset(
const allocator_type& _Allocator);
template <typename _Iterator>
concurrent_unordered_multiset(_Iterator first,
_Iterator last,
size_type _Number_of_buckets = 8,
const hasher& _Hasher = hasher(),
const key_equal& key_equality = key_equal(),
const allocator_type& _Allocator = allocator_type());
concurrent_unordered_multiset(
const concurrent_unordered_multiset& _Uset);
concurrent_unordered_multiset(
const concurrent_unordered_multiset& _Uset,
const allocator_type& _Allocator);
concurrent_unordered_multiset(
concurrent_unordered_multiset&& _Uset);
参数
_Iterator
输入迭代器的类型。
_Number_of_buckets
此无序多重集的初始存储桶数。
_Hasher
此无序多重集的哈希函数。
key_equality
此无序多重集的相等性比较函数。
_Allocator
此无序多重集的分配器。
first
last
_Uset
要从中移动元素的源 concurrent_unordered_multiset
对象。
备注
所有构造函数都会存储一个分配器对象 _Allocator
并初始化无序的多重集。
第一个构造函数指定一个空的初始多重集,并显式指定要使用的存储桶的数量、哈希函数、相等性比较函数和分配器类型。
第二个构造函数指定无序多重集的分配器。
第三个构造函数指定迭代器范围 [_Begin
, _End
) 提供的值。
第四个和第五个构造函数指定并发无序多重集 _Uset
的副本。
最后一个构造函数指定并发无序多重集 _Uset
的移动。
count
计算与指定键匹配的元素数。 此函数是并发安全的。
size_type count(const key_type& KVal) const;
参数
KVal
要搜索的键。
返回值
键出现在容器中的次数。
empty
测试元素是否存在。 此方法是并发安全的。
bool empty() const;
返回值
如果并发容器为空,则为 true
;否则为 false
。
备注
在存在并发插入的情况下,并发容器是否为空可能会在调用此函数后立即更改,甚至在读取返回值之前。
end
返回一个迭代器,指向并发容器中最后一个元素之后的位置。 此方法是并发安全的。
iterator end();
const_iterator end() const;
返回值
一个迭代器,指向并发容器中最后一个元素之后的位置。
equal_range
查找与指定键匹配的范围。 此函数是并发安全的。
std::pair<iterator,
iterator> equal_range(
const key_type& KVal);
std::pair<const_iterator,
const_iterator> equal_range(
const key_type& KVal) const;
参数
KVal
要搜索的键值。
返回值
一个 pair 结构,其中第一个元素是指向开头的迭代器,第二个元素是指向范围末尾的迭代器。
备注
并发插入可能会导致在开始迭代器之后和结束迭代器之前插入额外的键。
find
查找与指定键匹配的元素。 此函数是并发安全的。
iterator find(const key_type& KVal);
const_iterator find(const key_type& KVal) const;
参数
KVal
要搜索的键值。
返回值
一个迭代器,指向与提供的键匹配的第一个元素的位置,如果不存在这样的元素,则为迭代器 end()
。
get_allocator
返回此并发容器的存储分配器对象。 此方法是并发安全的。
allocator_type get_allocator() const;
返回值
此并发容器的存储分配器对象。
hash_function
返回存储的哈希函数对象。
hasher hash_function() const;
返回值
存储的哈希函数对象。
insert
向 concurrent_unordered_multiset
对象添加元素。
iterator insert(
const value_type& value);
iterator insert(
const_iterator _Where,
const value_type& value);
template<class _Iterator>
void insert(_Iterator first,
_Iterator last);
template<class V>
iterator insert(
V&& value);
template<class V>
typename std::enable_if<!std::is_same<const_iterator,
typename std::remove_reference<V>::type>::value,
iterator>::type insert(
const_iterator _Where,
V&& value);
参数
_Iterator
用于插入的迭代器类型。
V
插入值的类型。
value
要插入的值。
_Where
搜索插入点的起始位置。
first
要插入的范围的开始处。
last
要插入的范围的结尾处。
返回值
指向插入位置的迭代器。
注解
第一个成员函数将元素 value
插入受控序列,然后返回指定插入元素的迭代器。
第二个成员函数返回 insert(value
),使用 _Where
作为受控序列中的起始位置来搜索插入点。
第三个成员函数插入范围 [first
, last
) 中的元素值序列。
最后两个成员函数与前两个成员函数的行为相同,除了 value
用于构造插入值外。
key_eq
存储的相等比较函数对象。
key_equal key_eq() const;
返回值
存储的相等比较函数对象。
load_factor
计算并返回容器的当前负载因子。 负载因子是容器中元素的数量除以桶的数量。
float load_factor() const;
返回值
容器的负载系数。
max_load_factor
获取或设置容器的最大负载因子。 最大负载因子是在容器增长其内部表之前任何存储桶中的最大元素数。
float max_load_factor() const;
void max_load_factor(float _Newmax);
参数
_Newmax
返回值
第一个成员函数将返回存储的最大加载因子。 如果提供的负载因子无效,第二个成员函数不会返回值,但会引发 out_of_range 异常。
max_size
返回由分配器确定的并发容器的最大大小。 此方法是并发安全的。
size_type max_size() const;
返回值
可以插入此并发容器的最大元素数。
备注
这个上限值实际上可能高于容器实际可以容纳的值。
operator=
将另一 concurrent_unordered_multiset
对象的内容分配给此对象。 此方法不是并发安全方法。
concurrent_unordered_multiset& operator= (const concurrent_unordered_multiset& _Uset);
concurrent_unordered_multiset& operator= (concurrent_unordered_multiset&& _Uset);
参数
_Uset
源 concurrent_unordered_multiset
对象。
返回值
对此 concurrent_unordered_multiset
对象的引用。
备注
在清除并发无序多重集中的所有现有元素后,operator=
会将 _Uset
的内容复制或移动到并发无序多重集中。
rehash
重新生成哈希表。
void rehash(size_type _Buckets);
参数
_Buckets
所需的桶数。
备注
成员函数将存储桶数更改为至少 _Buckets
并根据需要重新生成哈希表。 桶的数量必须是 2 的幂。 如果不是 2 的幂,将向上取整到 2 的下一个最大幂。
如果存储桶数无效(0 或大于最大存储桶数),则会引发 out_of_range 异常。
大小
返回此并发容器中的元素数量。 此方法是并发安全的。
size_type size() const;
返回值
容器中的项数。
备注
在存在并发插入时,并发容器中的元素数量可能会在调用此函数后立即更改,甚至会在读取返回值之前。
swap
交换两个 concurrent_unordered_multiset
对象的内容。 此方法不是并发安全方法。
void swap(concurrent_unordered_multiset& _Uset);
参数
_Uset
要交换的 concurrent_unordered_multiset
对象。
unsafe_begin
为特定存储桶返回此容器中第一个元素的迭代器。
local_iterator unsafe_begin(size_type _Bucket);
const_local_iterator unsafe_begin(size_type _Bucket) const;
参数
_Bucket
桶索引。
返回值
指向桶开头的迭代器。
unsafe_bucket
返回此容器中特定键映射到的存储桶索引。
size_type unsafe_bucket(const key_type& KVal) const;
参数
KVal
正在搜索的元素键。
返回值
此容器中键的桶索引。
unsafe_bucket_count
返回此容器中的当前桶数。
size_type unsafe_bucket_count() const;
返回值
此容器中的当前存储桶数。
unsafe_bucket_size
返回此容器的特定存储桶中的项数。
size_type unsafe_bucket_size(size_type _Bucket);
参数
_Bucket
要搜索的存储桶。
返回值
此容器中的当前存储桶数。
unsafe_cbegin
为特定存储桶返回此容器中第一个元素的迭代器。
const_local_iterator unsafe_cbegin(size_type _Bucket) const;
参数
_Bucket
桶索引。
返回值
指向桶开头的迭代器。
unsafe_cend
将迭代器返回到特定存储桶中最后一个元素之后的位置。
const_local_iterator unsafe_cend(size_type _Bucket) const;
参数
_Bucket
桶索引。
返回值
指向桶开头的迭代器。
unsafe_end
为特定存储桶返回此容器中最后一个元素的迭代器。
local_iterator unsafe_end(size_type _Bucket);
const_local_iterator unsafe_end(size_type _Bucket) const;
参数
_Bucket
桶索引。
返回值
指向桶末尾的迭代器。
unsafe_erase
从 concurrent_unordered_multiset
中的指定位置移除元素。 此方法不是并发安全方法。
iterator unsafe_erase(
const_iterator _Where);
iterator unsafe_erase(
const_iterator first,
const_iterator last);
size_type unsafe_erase(
const key_type& KVal);
参数
_Where
要擦除的迭代器位置。
first
last
KVal
要擦除的键值。
返回值
前两个成员函数返回一个迭代器,该迭代器指定除任何已删除元素之外剩余的第一个元素,如果不存在这样的元素,则返回 end()。 第三个成员函数返回它删除的元素数。
注解
第一个成员函数删除 _Where
指向的元素。 第二个成员函数删除范围 [_Begin
, _End
) 中的元素。
第三个成员函数删除由 equal_range(KVal) 分隔的范围内的元素。
unsafe_max_bucket_count
返回此容器中的最大桶数。
size_type unsafe_max_bucket_count() const;
返回值
此容器中的最大桶数。