同時性が安全ではない修飾子

このセクションのすべてのメンバー関数は、シリアルにのみ実行できます。これらのメンバー関数を (同時処理の安全性が保障される) 他のメソッドと同時に実行する場合、動作は未定義です。

クリア

void clear();

コンテナーからすべての要素を削除します。

要素を消去

iterator unsafe_erase( const_iterator pos ); 

iterator unsafe_erase( iterator pos );

pos が指してい要素をコンテナーから削除します。

すべてのイテレーターと削除された要素への参照を無効にします。

戻り値: 削除された要素の次を示す iterator を返します。

要件: イテレーター pos は有効で逆参照可能であり、*this 内の要素を指している必要があります。


size_type unsafe_erase( const key_type& key );

key に相当する要素がコンテナー内に存在する場合は削除します。

すべてのイテレーターと削除された要素への参照を無効にします。

戻り値: key に相当する要素が存在する場合は 1 を、それ以外は 0 を返します。


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

key に相当する要素がコンテナー内に存在する場合は削除します。

すべてのイテレーターと削除された要素への参照を無効にします。

このオーバーロードは、次の条件がすべて満たされる場合にのみ。オーバーロードの解決に参加します。

  • 修飾 ID hasher::transparent_key_equal は有効であり、タイプを示します。

  • std::is_convertible<K, iterator>::valuefalse です。

  • std::is_convertible<K, const_iterator>::valuefalse です。

戻り値: key に相当する要素が存在する場合は 1 を、それ以外は 0 を返します。

シーケンスを消去

iterator unsafe_erase( const_iterator first, const_iterator last );

コンテナーから半開区間 [first, last) のすべての要素を削除します。

戻り値: 削除された要素の次を示す iteratorを返します。

要件: 半開区間 [first, last) は、*this 内の有効なサブレンジである必要があります。

ノードを消去

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

pos が示す要素の所有権をコンテナーからノードハンドルに転送します。

value_type のコンストラクターのコピーおよび移動は行われません。

抽出された要素に対するすべてのテレーターを無効にします。抽出された要素へのポインターと参照は有効なままです。

戻り値: 抽出された要素を所有するノードハンドルを返します。

要件: イテレーター pos は有効で逆参照可能であり、*this 内の要素を指している必要があります。


node_type unsafe_extract( const key_type& key );

key と同等のキーを持つ要素が存在する場合、その要素の所有権をコンテナーからノードハンドルに転送します。

value_type のコンストラクターのコピーおよび移動は行われません。

抽出された要素に対するすべてのテレーターを無効にします。抽出された要素へのポインターと参照は有効なままです。

戻り値: 抽出された要素を所有するノードハンドル、または key に相当する要素が見つからない場合は空のノードハンドルを返します。


template <typename K> 
node_type unsafe_extract( const K& key );

key と同等のキーを持つ要素が存在する場合、その要素の所有権をコンテナーからノードハンドルに転送します。

value_type のコンストラクターのコピーおよび移動は行われません。

抽出された要素に対するすべてのテレーターを無効にします。抽出された要素へのポインターと参照は有効なままです。

このオーバーロードは、次の条件がすべて満たされる場合にのみ。オーバーロードの解決に参加します。

  • 修飾 ID hasher::transparent_key_equal は有効であり、タイプを示します。

  • std::is_convertible<K, iterator>::valuefalse です。

  • std::is_convertible<K, const_iterator>::valuefalse です。

戻り値: 抽出された要素を所有するノードハンドル、または key に相当する要素が見つからない場合は空のノードハンドルを返します。

swap

void swap( concurrent_unordered_set& other ) noexcept(/*See below*/);

*thisother の内容を入れ替えます。

std::allocator_traits<allocator_type>::propagate_on_container_swap::valuetrue の場合、アロケーターを入れ替えます。

そうでない場合、get_allocator() != other.get_allocator() の動作は未定義です。

例外: 具体的に noexcept は以下です。

noexcept(std::allocator_traits<allocator_type>::is_always_equal::value && std::is_nothrow_swappable<hasher>::value && std::is_nothrow_swappable<key_equal>::value