concurrent_priority_queue 类
concurrent_priority_queue
类是允许多个线程并发推送和弹出项的容器。 项按优先级顺序弹出,其中优先级由作为模板参数提供的涵子确定。
语法
template <typename T,
typename _Compare= std::less<T>,
typename _Ax = std::allocator<T>
>,
typename _Ax = std::allocator<T>> class concurrent_priority_queue;
参数
T
要存储在优先级队列中的元素的数据类型。
_Compare
可将两个元素的值作为排序键进行比较以确定其在优先级队列中相对顺序的函数对象的类型。 此参数为可选自变量,默认值是二元谓词 less<T>
。
_Ax
一种表示存储的分配器对象的类型,该分配器对象封装有关并发优先级队列的内存分配和解除分配的详细信息。 此参数为可选参数,默认值为 allocator<T>
。
成员
公共 Typedef
名称 | 描述 |
---|---|
allocator_type |
一种表示适用于并发优先级队列的分配器类的类型。 |
const_reference |
一种表示存储在并发优先级队列中类型的一个元素的常量引用的类型。 |
reference |
一种表示存储在并发优先级队列中类型的一个元素的引用的类型。 |
size_type |
一种计算并发优先级队列中元素数量的类型。 |
value_type |
一种表示存储在并发优先级队列中的数据类型的类型。 |
公共构造函数
名称 | 描述 |
---|---|
concurrent_priority_queue | 已重载。 构造并发优先级队列。 |
公共方法
名称 | 描述 |
---|---|
clear | 清除并发优先级中的所有元素。 此方法不是并发安全方法。 |
empty | 测试在调用此方法时并发优先级队列是否为空。 此方法是并发安全的。 |
get_allocator | 返回用于构造并发优先级队列的分配器的副本。 此方法是并发安全的。 |
push | 已重载。 在并发优先级队列中添加一个元素。 此方法是并发安全的。 |
size | 返回并发优先级队列中元素的数量。 此方法是并发安全的。 |
swap | 交换两个并发优先级队列中的内容。 此方法不是并发安全方法。 |
try_pop | 如果队列非空,移除并返回队列中优先级最高的元素。 此方法是并发安全的。 |
公共运算符
“属性” | 描述 |
---|---|
operator= | 已重载。 将另一 concurrent_priority_queue 对象的内容分配给此对象。 此方法不是并发安全方法。 |
注解
有关 concurrent_priority_queue
类的详细信息,请参阅并行容器和对象。
继承层次结构
concurrent_priority_queue
要求
标头:concurrent_priority_queue.h
命名空间: 并发
clear
清除并发优先级中的所有元素。 此方法不是并发安全方法。
void clear();
备注
clear
不是并发安全的。 调用此方法时,必须确保没有其他线程在并发优先级队列上调用方法。 clear
不释放内存。
concurrent_priority_queue
构造并发优先级队列。
explicit concurrent_priority_queue(
const allocator_type& _Al = allocator_type());
explicit concurrent_priority_queue(
size_type _Init_capacity,
const allocator_type& _Al = allocator_type());
template<typename _InputIterator>
concurrent_priority_queue(_InputIterator _Begin,
_InputIterator _End,
const allocator_type& _Al = allocator_type());
concurrent_priority_queue(
const concurrent_priority_queue& _Src);
concurrent_priority_queue(
const concurrent_priority_queue& _Src,
const allocator_type& _Al);
concurrent_priority_queue(
concurrent_priority_queue&& _Src);
concurrent_priority_queue(
concurrent_priority_queue&& _Src,
const allocator_type& _Al);
参数
_InputIterator
输入迭代器的类型。
_Al
要用于此对象的分配器类。
_Init_capacity
concurrent_priority_queue
对象的初始容量。
_Begin
要复制的范围元素中的第一个元素的位置。
_End
要复制的元素范围以外的第一个元素的位置。
_Src
要从中复制或移动元素的源 concurrent_priority_queue
对象。
备注
所有构造函数都会存储一个分配器对象 _Al
并初始化优先级队列。
第一个构造函数指定空的初始优先级队列,并选择性地指定分配器。
第二个构造函数指定具有初始容量 _Init_capacity
的优先级队列,并选择性地指定分配器。
第三个构造函数指定由迭代器范围[ _Begin
, _End
) 提供的值,并选择性地指定分配器。
第四个和第五个构造函数指定优先级队列 _Src
的副本。
第六个和第七个构造函数指定优先级队列 _Src
的移动。
empty
测试在调用此方法时并发优先级队列是否为空。 此方法是并发安全的。
bool empty() const;
返回值
如果在调用函数时优先级队列为空,则为 true
,否则为 false
。
get_allocator
返回用于构造并发优先级队列的分配器的副本。 此方法是并发安全的。
allocator_type get_allocator() const;
返回值
用于构造 concurrent_priority_queue
对象的分配器的副本。
operator=
将另一 concurrent_priority_queue
对象的内容分配给此对象。 此方法不是并发安全方法。
concurrent_priority_queue& operator= (const concurrent_priority_queue& _Src);
concurrent_priority_queue& operator= (concurrent_priority_queue&& _Src);
参数
_Src
源 concurrent_priority_queue
对象。
返回值
对此 concurrent_priority_queue
对象的引用。
push
在并发优先级队列中添加一个元素。 此方法是并发安全的。
void push(const value_type& _Elem);
void push(value_type&& _Elem);
参数
_Elem
要在并发优先级队列中添加的元素。
大小
返回并发优先级队列中元素的数量。 此方法是并发安全的。
size_type size() const;
返回值
此 concurrent_priority_queue
对象中的元素数。
备注
保证返回的大小要能包括通过调用函数 push
添加的所有元素。 但可能不会反映挂起的并发操作的结果。
swap
交换两个并发优先级队列中的内容。 此方法不是并发安全方法。
void swap(concurrent_priority_queue& _Queue);
参数
_Queue
要与其交换内容的 concurrent_priority_queue
对象。
try_pop
如果队列非空,移除并返回队列中优先级最高的元素。 此方法是并发安全的。
bool try_pop(reference _Elem);
参数
_Elem
如果队列非空,则是对将使用最高优先级元素填充的变量的引用。
返回值
如果已弹出一个值,则为 true
否则为 false
。