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 2 つの要素間の距離を表す、符号付きの型です。
hasher ハッシュ関数の型です。
iterator 被制御シーケンスの反復子の型です。
key_equal 比較関数の型です。
key_type 順序付けキーの型です。
local_iterator 被制御シーケンスのバケット反復子の型です。
pointer 要素へのポインターの型です。
reference 要素への参照の型です。
size_type 2 つの要素間の距離を表す、符号なしの型です。
value_type 要素の型。

パブリック コンストラクター

名前 説明
concurrent_unordered_multiset 過負荷です。 同時実行順序なしのマルチセットを構築します。

パブリック メソッド

名前 説明
hash_function 格納されているハッシュ関数オブジェクトを返します。
insert 過負荷です。 要素を concurrent_unordered_multiset オブジェクトに追加します。
key_eq 格納された等価比較関数のオブジェクト。
スワップ 2 つの 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

名前空間: concurrency

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 を格納し、順序なしマルチセットを初期化します。

最初のコンストラクターは、空の初期マルチセットを指定し、使用されるバケットの数、ハッシュ関数、等価関数、アロケーターの型を明示的に指定します。

2 つ目のコンストラクターは、順序なしマルチセットのアロケーターを指定します。

3 つ目のコンストラクターは、反復子の範囲 (_Begin_End) で入力される値を指定します。

4 つ目と 5 つ目のコンストラクターは、同時実行順序なしマルチセット _Uset のコピーを指定します。

最後のコンストラクターは、同時実行順序なしマルチセット _Uset の移動を指定します。

count

指定されたキーと一致する要素の数をカウントします。 この関数はコンカレンシー セーフです。

size_type count(const key_type& KVal) const;

パラメーター

KVal
検索するキー。

戻り値

キーがコンテナー内に出現する回数。

要素が存在しないかどうかをテストします。 このメソッドはコンカレンシー セーフです。

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
検索するキー値。

戻り値

1 つ目の要素が範囲の先頭に対する反復子であり、2 つ目の要素が範囲の末尾に対する反復子であるペア

解説

同時挿入によって、開始反復子の後と終了反復子の前に追加のキーが挿入される可能性があります。

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
挿入する範囲の末尾。

戻り値

挿入位置を指す反復子。

解説

1 つ目のメンバー関数は、被制御シーケンス内に要素 value を挿入してから、挿入された要素を指定する反復子を返します。

2 つ目のメンバー関数は、挿入ポイントを検索するための被制御シーケンス内の開始場所として _Where を使用して、insert(value) を返します。

3 つ目のメンバー関数は、範囲 (firstlast) から要素値のシーケンスを挿入します。

最後の 2 つのメンバー関数は、最初の 2 つと同様に動作しますが、挿入値を構築するために 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

戻り値

1 つ目のメンバー関数は、格納されている最大テーブル占有率を返します。 2 つ目のメンバー関数は値を返しませんが、指定された占有率が無効な場合に 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

この同時実行コンテナー内の要素の数を返します。 このメソッドはコンカレンシー セーフです。

size_type size() const;

戻り値

コンテナー内の項目数。

解説

同時挿入が存在する場合、同時実行コンテナー内の要素数は、この関数の呼び出し直後、戻り値が読み取られる前に変わる可能性があります。

スワップ

2 つの 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
消去するキー値。

戻り値

最初の 2 つのメンバー関数は、削除された要素の後の最初の残存要素を指定する反復子を返します。このような要素が存在しない場合は、end() を返します。 3 つ目のメンバー関数は削除する要素の数を返します。

解説

1 つ目のメンバー関数は、_Where が指す要素を削除します。 2 つ目のメンバー関数は、範囲 [_Begin, _End] 内の要素を削除します。

3 つ目のメンバー関数は、equal_range[KVal] で区切られた範囲内の要素を削除します。

unsafe_max_bucket_count

このコンテナー内のバケットの最大数を返します。

size_type unsafe_max_bucket_count() const;

戻り値

このコンテナー内のバケットの最大数。

関連項目

コンカレンシー名前空間
並列コンテナーと並列オブジェクト