concurrent_priority_queue

[containers.concurrent_priority_queue]

oneapi::tbb::concurrent_priority_queue は、複数のスレッドが項目のプッシュとポップを同時に行うことができる無制限の優先度キューのクラス・テンプレートです。項目は優先順にポップされます。

クラス・テンプレートの概要


namespace oneapi { 
    namespace tbb { 
        template <

            typename T, typename Compare = std::less<T>, 
                                     typename Allocator = cache_aligned_allocator<T>> 
            class concurrent_priority_queue { 
            public: 
                using value_type = T; 
                using reference = T&; 
                using const_reference = const T&; 
                using size_type = <implementation-defined unsigned integer type>; 
                using difference_type = <implementation-defined signed integer type>; 
                using allocator_type = Allocator; 

                concurrent_priority_queue(); 
                explicit concurrent_priority_queue( const allocator_type& alloc ); 

                explicit concurrent_priority_queue( const Compare& compare, 
                                           const allocator_type& alloc = allocator_type() ); 

                explicit concurrent_priority_queue( size_type init_capacity, const allocator_type& alloc = allocator_type() ); 

                explicit concurrent_priority_queue( size_type init_capacity, const Compare& compare, 
                                           const allocator_type& alloc = allocator_type() ); 

                template <typename InputIterator> 
                concurrent_priority_queue( InputIterator first, InputIterator last, 
                                           const allocator_type& alloc = allocator_type() ); 

                template <typename InputIterator> 
                concurrent_priority_queue( InputIterator first, InputIterator last, 
                                           const Compare& compare, const allocator_type& alloc = allocator_type() ); 

                concurrent_priority_queue( std::initializer_list<value_type> init, 
                                          const allocator_type& alloc = allocator_type() ); 

                concurrent_priority_queue( std::initializer_list<value_type> init, 
                                          const Compare& compare, const allocator_type& alloc = allocator_type() ); 

                concurrent_priority_queue( const concurrent_priority_queue& other ); 
                concurrent_priority_queue( const concurrent_priority_queue& other, const allocator_type& alloc ); concurrent_priority_queue( concurrent_priority_queue&& other ); 

                concurrent_priority_queue( concurrent_priority_queue&& other, const allocator_type& alloc ); 

                ~concurrent_priority_queue(); 

                concurrent_priority_queue& operator=( const concurrent_priority_queue& other ); 
                concurrent_priority_queue& operator=( concurrent_priority_queue&& other ); 
                concurrent_priority_queue& operator=( std::initializer_list<value_type> init ); 

                template <typename InputIterator> 
                void assign( InputIterator first, InputIterator last ); 

                void assign( std::initializer_list<value_type> init ); 

                void swap( concurrent_priority_queue& other ); 

                allocator_type get_allocator() const; 

                void clear(); 

                bool empty() const; 
                size_type size() const; 

                void push( const value_type& value ); 
                void push( value_type&& value ); 

                template <typename... Args> 
                void emplace( Args&&... args ); 

                bool try_pop( value_type& value ); 
            }; // class concurrent_priority_queue 
        }; // namespace tbb 
} // namespace oneapi

要件:

  • T タイプは、[allocator.requirements] ISO C++ 標準の Erasable 要件を満たしている必要があります。メンバー関数は、操作タイプに応じてより厳密な要件を課す場合があります。

  • Compare タイプは、[allocator.requirements] ISO C++ 標準の Compare 要件を満たしている必要があります。

  • Allocator タイプは、[allocator.requirements] ISO C++ 標準の Allocator 要件を満たしている必要があります。

メンバー関数

非メンバー関数

これらの関数は、oneapi::tbb::concurrent_priority_queue オブジェクトに対するバイナリー比較およびスワップ操作を提供します。

これらの関数が定義される名前空間は、それぞれの比較操作で使用できるかぎり未指定です。例えば、実装では、同じ内部名前空間でクラスと関数を定義し oneapi::tbb::concurrent_priority_queue をタイプエイリアスとして定義できます。この場合、非メンバー関数には引数依存のルックアップによってのみ到達できます。


template <typename T, typename Compare, typename Allocator> 
void swap( concurrent_priority_queue<T, Compare, Allocator>& lhs, 
              concurrent_priority_queue<T, Compare, Allocator>& rhs ); 

template <typename T, typename Compare, typename Allocator> 
bool operator==( const concurrent_priority_queue<T, Compare, Allocator>& lhs, 
              const concurrent_priority_queue<T, Compare, Allocator>& rhs ); 

template <typename T, typename Compare, typename Allocator> 
bool operator!=( const concurrent_priority_queue<T, Compare, Allocator>& lhs, 
              const concurrent_priority_queue<T, Compare, Allocator>& rhs );

その他