concurrent_unordered_map クラス
ph x="1" /> クラスは、std::pair<const K, _Element_type>
型要素の可変長シーケンスを制御するコンカレンシー セーフなコンテナーです。 このシーケンスは、コンカレンシー セーフな追加、要素アクセス、反復子アクセス、反復子走査の各操作を実行できるように表されます。 ここでは、コンカレンシー セーフは、ポインターまたは反復子が常に有効であることを意味します。 要素の初期化または特定の走査順序が保証されるわけではありません。
構文
template <typename K,
typename _Element_type,
typename _Hasher = std::hash<K>,
typename key_equality = std::equal_to<K>,
typename _Allocator_type = std::allocator<std::pair<const K,
_Element_type>>
>,
typename key_equality = std::equal_to<K>,
typename _Allocator_type = std::allocator<std::pair<const K,
_Element_type>>> class concurrent_unordered_map : public details::_Concurrent_hash<details::_Concurrent_unordered_map_traits<K,
_Element_type,
details::_Hash_compare<K,
_Hasher,
key_equality>,
_Allocator_type,
false>>;
パラメーター
K
キーの型。
_Element_type
マップされた型。
_Hasher
ハッシュ関数のオブジェクト型。 この引数は省略可能であり、既定値は std::hash<K>
です。
key_equality
等価比較関数のオブジェクト型。 この引数は省略可能であり、既定値は std::equal_to<K>
です。
_Allocator_type
同時実行順序なしのマップのメモリの割り当てと解放に関する詳細をカプセル化する、格納されたアロケーター オブジェクトを表す型。 この引数は、省略可能であり、既定値は std::allocator<std::pair<K
、_Element_type>>
です。
メンバー
パブリック typedef
名前 | 説明 |
---|---|
allocator_type |
ストレージを管理するためのアロケーターの型です。 |
const_iterator |
被制御シーケンスの定数反復子の型です。 |
const_local_iterator |
被制御シーケンスの定数バケット反復子の型です。 |
const_pointer |
要素への定数ポインターの型です。 |
const_reference |
要素への定数参照の型です。 |
difference_type |
2 つの要素間の距離を表す、符号付きの型です。 |
hasher |
ハッシュ関数の型です。 |
iterator |
被制御シーケンスの反復子の型です。 |
key_equal |
比較関数の型です。 |
key_type |
順序付けキーの型です。 |
local_iterator |
被制御シーケンスのバケット反復子の型です。 |
mapped_type |
各キーに関連付けられた、マップされた値の型です。 |
pointer |
要素へのポインターの型です。 |
reference |
要素への参照の型です。 |
size_type |
2 つの要素間の距離を表す、符号なしの型です。 |
value_type |
要素の型。 |
パブリック コンストラクター
名前 | 説明 |
---|---|
concurrent_unordered_map | 過負荷です。 同時実行順序なしのマップを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
at | 過負荷です。 concurrent_unordered_map 内の指定されたキー値を持つ要素を検索します。 このメソッドはコンカレンシー セーフです。 |
hash_function | 格納されているハッシュ関数オブジェクトを取得します。 |
insert | 過負荷です。 要素を concurrent_unordered_map オブジェクトに追加します。 |
key_eq | 格納された等価比較関数のオブジェクトを取得します。 |
スワップ | 2 つの concurrent_unordered_map オブジェクトのコンテンツを交換します。 このメソッドはコンカレンシー セーフではありません。 |
unsafe_erase | 過負荷です。 concurrent_unordered_map から指定した位置にある要素を削除します。 このメソッドはコンカレンシー セーフではありません。 |
パブリック演算子
名前 | 説明 |
---|---|
operator[] | 過負荷です。 指定したキーを持つ要素を検索または挿入します。 このメソッドはコンカレンシー セーフです。 |
operator= | 過負荷です。 別の concurrent_unordered_map オブジェクトの内容をこのオブジェクトに割り当てます。 このメソッドはコンカレンシー セーフではありません。 |
解説
concurrent_unordered_map
クラスの詳細については、「並列コンテナーと並列オブジェクト」を参照してください。
継承階層
_Traits
_Concurrent_hash
concurrent_unordered_map
要件
ヘッダー: concurrent_unordered_map.h
名前空間: concurrency
at
concurrent_unordered_map
内の指定されたキー値を持つ要素を検索します。 このメソッドはコンカレンシー セーフです。
mapped_type& at(const key_type& KVal);
const mapped_type& at(const key_type& KVal) const;
パラメーター
KVal
検索するキー値。
戻り値
見つかった要素のデータ値への参照。
解説
引数のキー値が見つからない場合、この関数は、out_of_range
クラスのオブジェクトをスローします。
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_map
同時実行順序なしのマップを構築します。
explicit concurrent_unordered_map(
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_map(
const allocator_type& _Allocator);
template <typename _Iterator>
concurrent_unordered_map(_Iterator _Begin,
_Iterator _End,
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_map(
const concurrent_unordered_map& _Umap);
concurrent_unordered_map(
const concurrent_unordered_map& _Umap,
const allocator_type& _Allocator);
concurrent_unordered_map(
concurrent_unordered_map&& _Umap);
パラメーター
_Iterator
入力反復子の型。
_Number_of_buckets
この順序なしマップのバケットの初期数。
_Hasher
この順序なしマップのハッシュ関数。
key_equality
この順序なしマップの等価比較関数。
_Allocator
この順序なしマップのアロケーター。
_Begin
コピーする要素範囲内の最初の要素の位置。
_End
コピーする要素範囲を超える最初の要素の位置。
_Umap
要素のコピー元または移動元の concurrent_unordered_map
オブジェクト。
解説
すべてのコンストラクターが、アロケーター オブジェクト _Allocator
を格納し、順序なしマップを初期化します。
最初のコンストラクターは、空の初期マップを指定し、使用されるバケットの数、ハッシュ関数、等価関数、アロケーターの型を明示的に指定します。
2 つ目のコンストラクターは、順序なしマップのアロケーターを指定します。
3 つ目のコンストラクターは、反復子の範囲 (_Begin
、_End
) で入力される値を指定します。
4 つ目と 5 つ目のコンストラクターは、同時実行順序なしマップ _Umap
のコピーを指定します。
最後のコンストラクターは、同時実行順序なしマップ _Umap
の移動を指定します。
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_map
オブジェクトに追加します。
std::pair<iterator,
bool> 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>
std::pair<iterator,
bool> 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
挿入する範囲の末尾。
戻り値
反復子とブール値を含むペア。 詳細については、「解説」を参照してください。
解説
最初のメンバー関数は、キーの順序が value
の順序と同じである要素 X がシーケンスに存在するかどうかを判断します。 存在しない場合は、このような要素 X を作成し、value
で初期化します。 次に、関数は X を指定する反復子 where
を決定します。挿入が行われた場合は、std::pair(where, true)
を返します。 それ以外の場合は std::pair(where, false)
を返します。
2 つ目のメンバー関数は、挿入ポイントを検索するための被制御シーケンス内の開始場所として _Where
を使用して、insert(value
) を返します。
3 つ目のメンバー関数は、範囲 (first
、last
) から要素値のシーケンスを挿入します。
最後の 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[]
指定したキーを持つ要素を検索または挿入します。 このメソッドはコンカレンシー セーフです。
mapped_type& operator[](const key_type& kval);
mapped_type& operator[](key_type&& kval);
パラメーター
KVal
検索または挿入する
キー値。
戻り値
見つかった要素または挿入された要素のデータ値への参照。
解説
引数のキー値が見つからない場合は、データ型の既定値と一緒に挿入されます。
operator[]
は、m[key] = DataValue;
を使用してマップ m
に要素を挿入するために使用できます。DataValue
は、キー値が key
である要素の mapped_type
の値です。
operator[]
を使用して要素を挿入した場合、返される参照では、挿入によって既存の要素が変更される、または新しい要素が作成されるかどうかは指示されません。 メンバー関数 find
と insert を使用して、指定されたキーを持つ要素が挿入前に既に存在するかどうかを確認できます。
operator=
別の concurrent_unordered_map
オブジェクトの内容をこのオブジェクトに割り当てます。 このメソッドはコンカレンシー セーフではありません。
concurrent_unordered_map& operator= (const concurrent_unordered_map& _Umap);
concurrent_unordered_map& operator= (concurrent_unordered_map&& _Umap);
パラメーター
_Umap
ソース concurrent_unordered_map
オブジェクト。
戻り値
この concurrent_unordered_map
オブジェクトへの参照。
解説
同時実行ベクター内の既存の要素を消去した後、operator=
は _Umap
の内容をその同時実行ベクターにコピーまたは移動します。
rehash
ハッシュ テーブルをリビルドします。
void rehash(size_type _Buckets);
パラメーター
_Buckets
必要なバケット数。
解説
メンバー関数は、バケット数を _Buckets
以上に変更し、必要に応じて、ハッシュ テーブルをリビルドします。 バケット数は 2 の累乗である必要があります。 2 の累乗でない場合は、次の最大の 2 の累乗に切り上げられます。
バケット数が無効な場合 (0 またはバケットの最大数を超えている場合) は、out_of_range 例外がスローされます。
size
この同時実行コンテナー内の要素の数を返します。 このメソッドはコンカレンシー セーフです。
size_type size() const;
戻り値
コンテナー内の項目数。
解説
同時挿入が存在する場合、同時実行コンテナー内の要素数は、この関数の呼び出し直後、戻り値が読み取られる前に変わる可能性があります。
スワップ
2 つの concurrent_unordered_map
オブジェクトのコンテンツを交換します。 このメソッドはコンカレンシー セーフではありません。
void swap(concurrent_unordered_map& _Umap);
パラメーター
_Umap
入れ替える concurrent_unordered_map
オブジェクト。
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_map
から指定した位置にある要素を削除します。 このメソッドはコンカレンシー セーフではありません。
iterator unsafe_erase(
const_iterator _Where);
iterator unsafe_erase(
const_iterator _Begin,
const_iterator _End);
size_type unsafe_erase(
const key_type& KVal);
パラメーター
_Where
消去する反復子の位置。
_Begin
消去する要素範囲内の最初の要素の位置。
_End
消去する要素範囲を超える最初の要素の位置。
KVal
消去するキー値。
戻り値
最初の 2 つのメンバー関数は、削除された要素の後の最初の残存要素を指定する反復子を返します。このような要素が存在しない場合は、concurrent_unordered_map::end
() が返されます。 3 つ目のメンバー関数は削除する要素の数を返します。
解説
1 つ目のメンバー関数は、_Where
によって示される被制御シーケンスの要素を削除します。 2 つ目のメンバー関数は、範囲 [_Begin
, _End
] 内の要素を削除します。
3 つ目のメンバー関数は、concurrent_unordered_map::equal_range
(KVal) で区切られた範囲内の要素を削除します。
unsafe_max_bucket_count
このコンテナー内のバケットの最大数を返します。
size_type unsafe_max_bucket_count() const;
戻り値
このコンテナー内のバケットの最大数。