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

另请参阅

并发命名空间
并行容器和对象