concurrent_multimap

[containers.concurrent_multimap]

oneapi::tbb::concurrent_multimap はソートされてた連想コンテナーを表わすクラス・テンプレートです。同時挿入、ルックアップ、おとび走査をサポートしますが、同時消去はサポートされません。このコンテナーには、同じキーを持つ複数の要素を格納できます。

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


namespace oneapi { 
    namespace tbb { 

        template <typename Key, 
            typename T, 
            typename Compare = std::less<Key>, 
            typename Allocator = tbb_allocator<std::pair<const Key, T>> 
    class concurrent_multimap { 
    public: 
        using key_type = Key; 
        using mapped_type = T; 
        using value_type = std::pair<const Key, T>; 

        using size_type = <implementation-defined unsigned integer type>; 
        using difference_type = <implementation-defined signed integer type>; 

        using key_compare = Compare; 
        using allocator_type = Allocator; 

        using reference = value_type&; 
        using const_reference = const value_type&; 
        using pointer = std::allocator_traits<Allocator>::pointer;  
        using const_pointer = std::allocator_traits<Allocator>::const_pointer; 

        using iterator = <implementation-defined ForwardIterator>; 
        using const_iterator = <implementation-defined constant ForwardIterator>; 

        using node_type = <implementation-defined node handle>; 

        using range_type = <implementation-defined range>; 
        using const_range_type = <implementation-defined constant node handle>; 

        class value_compare; 

        // Construction, destruction, copying 
        concurrent_multimap(); 
        explicit concurrent_multimap( const key_compare& comp, 
                                      const allocator_type& alloc = allocator_type() ); 

        explicit concurrent_multimap( const allocator_type& alloc ); 

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

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

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

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

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

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

        ~concurrent_multimap(); 

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

        allocator_type get_allocator() const; 

        // Iterators 
        iterator begin(); 
        const_iterator begin() const; 
        const_iterator cbegin() const; 

        iterator end(); 
        const_iterator end() const; 
        const_iterator cend() const; 

        // Size and capacity 
        bool empty() const; 
        size_type size() const; 
        size_type max_size() const; 

        // Concurrently safe modifiers 
        std::pair<iterator, bool> insert( const value_type& value ); 

        iterator insert( const_iterator hint, const value_type& value ); 

        template <typename P> 
        std::pair<iterator, bool> insert( P&& value ); 

        template <typename P> 
        iterator insert( const_iterator hint, P&& value ); 

        std::pair<iterator, bool> insert( value_type&& value ); 

        iterator insert( const_iterator hint, value_type&& value ); 

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

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

        std::pair<iterator, bool> insert( node_type&& nh ); 
        iterator insert( const_iterator hint, node_type&& nh ); 

        template <typename...Args> 
        std::pair<iterator, bool> emplace( Args&&... args ); 

        template <typename...Args> 
        iterator emplace_hint( const_iterator hint, Args&&... args ); 

        template <typename SrcCompare> 
        void merge( concurrent_map<Key, T, SrcCompare, Allocator>& source ); 

        template <typename SrcCompare> 
        void merge( concurrent_map<Key, T, SrcCompare, Allocator>&& source ); 

        template <typename SrcCompare> 
        void merge( concurrent_multimap<Key, T, SrcCompare, Allocator>& source ); 

        template <typename SrcCompare> 
        void merge( concurrent_multimap<Key, T, SrcCompare, Allocator>&& source ); 

        // Concurrently unsafe modifiers 
        void clear(); 

        iterator unsafe_erase( const_iterator pos ); 
        iterator unsafe_erase( iterator pos ); 

        iterator unsafe_erase( const_iterator first, const_iterator last ); 

        size_type unsafe_erase( const key_type& key ); 

        template <typename K> 
        size_type unsafe_erase( const K& key ); 

        node_type unsafe_extract( const_iterator pos ); 
        node_type unsafe_extract( iterator pos ); 

        node_type unsafe_extract( const key_type& key ); 

        template <typename K> 
        node_type unsafe_extract( const K& key ); 
 
        void swap( concurrent_multimap& other ); 

        // Lookup 
        size_type count( const key_type& key ); 

        template <typename K> 
        size_type count( const K& key ); 

        iterator find( const key_type& key ); 
        const_iterator find( const key_type& key ) const; 

        template <typename K> 
        iterator find( const K& key ); 

        template <typename K> 
        const_iterator find( const K& key ) const; 

        bool contains( const key_type& key ) const; 

        template <typename K> 
        bool contains( const K& key ) const; 

        std::pair<iterator, iterator> equal_range( const key_type& key ); 
        std::pair<const_iterator, const_iterator> equal_range( const key_type& key ) const; 

        template <typename K> 
        std::pair<iterator, iterator> equal_range( const K& key ); 
        std::pair<const_iterator, const_iterator> equal_range( const K& key ) const; 

        iterator lower_bound( const key_type& key ); 
        const_iterator lower_bound( const key_type& key ) const; 

        template <typename K> 
        iterator lower_bound( const K& key ); 
 
        template <typename K> 
        const_iterator lower_bound( const K& key ) const; 

        iterator upper_bound( const key_type& key ); 
        const_iterator upper_bound( const key_type& key ) const; 

        template <typename K> 
        iterator upper_bound( const K& key ); 

        template <typename K> 
        const_iterator upper_bound( const K& key ) const; 

        // Observers 
        key_compare key_comp() const; 

        value_compare value_comp() const; 

        // Parallel iteration 
        range_type range(); 
        const_range_type range() const; 
        }; // class concurrent_multimap 
    } // namespace tbb 
} // namespace oneapi

要件:

  • std::allocator_traits<Allocator>::destroy(m, val) 、ここで mAllocator タイプのオブジェクトとvalvalue_type タイプのオブジェクトは、整数式でなければなりません。メンバー関数は、操作タイプに応じてより厳密な要件を課す場合があります。

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

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

メンバークラス

メンバー関数

非メンバー関数

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

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


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

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

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

typename Key, typename T, typename Compare, typename Allocator> 
bool operator<( const concurrent_multimap<Key, T, Compare, Allocator>& lhs, 
                const concurrent_multimap<Key, T, Compare, Allocator>& rhs ); 

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

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

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

その他