C++/標準ライブラリ/unordered set
表示
C++標準ライブラリの「<unordered_set>」ヘッダーについての解説は、C++標準仕様書(ISO/IEC JTC1/SC22/WG21 N4950)の24.5.3セクションで詳細に説明されています。以下にその解説の概要を示します。
24.5.3 Header <unordered_set> synopsis (unord.set.syn)
[編集]このセクションでは、<unordered_set>
ヘッダーの内容を簡潔にまとめています。
#include <compare> // see 17.11.1 #include <initializer_list> // see 17.10.2 namespace std { // 24.5.6, class template unordered_set template<class Key, class Hash = hash<Key>, class Pred = equal_to<Key>, class Alloc = allocator<Key>> class unordered_set; // 24.5.7, class template unordered_multiset template<class Key, class Hash = hash<Key>, class Pred = equal_to<Key>, class Alloc = allocator<Key>> class unordered_multiset; // Comparison operators template<class Key, class Hash, class Pred, class Alloc> bool operator==(const unordered_set<Key, Hash, Pred, Alloc>& a, const unordered_set<Key, Hash, Pred, Alloc>& b); template<class Key, class Hash, class Pred, class Alloc> bool operator==(const unordered_multiset<Key, Hash, Pred, Alloc>& a, const unordered_multiset<Key, Hash, Pred, Alloc>& b); // Swap functions template<class Key, class Hash, class Pred, class Alloc> void swap(unordered_set<Key, Hash, Pred, Alloc>& x, unordered_set<Key, Hash, Pred, Alloc>& y) noexcept(noexcept(x.swap(y))); template<class Key, class Hash, class Pred, class Alloc> void swap(unordered_multiset<Key, Hash, Pred, Alloc>& x, unordered_multiset<Key, Hash, Pred, Alloc>& y) noexcept(noexcept(x.swap(y))); // Erasure functions template<class K, class H, class P, class A, class Predicate> typename unordered_set<K, H, P, A>::size_type erase_if(unordered_set<K, H, P, A>& c, Predicate pred); template<class K, class H, class P, class A, class Predicate> typename unordered_multiset<K, H, P, A>::size_type erase_if(unordered_multiset<K, H, P, A>& c, Predicate pred); namespace pmr { template<class Key, class Hash = hash<Key>, class Pred = equal_to<Key>> using unordered_set = std::unordered_set<Key, Hash, Pred, polymorphic_allocator<Key>>; template<class Key, class Hash = hash<Key>, class Pred = equal_to<Key>> using unordered_multiset = std::unordered_multiset<Key, Hash, Pred, polymorphic_allocator<Key>>; } }
この概要には、次の要素が含まれます:
1. クラステンプレート unordered_set
と unordered_multiset
[編集]unordered_set
はキーの集合を保持するための無順序コンテナです。unordered_multiset
は重複を許すキーの集合を保持する無順序コンテナです。
両者ともデフォルトのハッシュ関数 (hash<Key>
) と等値比較関数 (equal_to<Key>
) を使用し、アロケータ (allocator<Key>
) を指定できます。
2. 比較演算子
[編集]unordered_set
およびunordered_multiset
の等価比較演算子が定義されています。これにより、2つの無順序集合の等価性を比較できます。
3. スワップ関数
[編集]unordered_set
およびunordered_multiset
のスワップ関数が定義されています。2つの無順序集合の内容を交換するための関数です。これらはnoexcept
指定が付いており、例外を投げないことが保証されています。
4. 削除関数(erasure)
[編集]- 条件に基づいて要素を削除するための関数
erase_if
がunordered_set
およびunordered_multiset
用に定義されています。削除された要素の数を返します。
5. pmr
名前空間のエイリアステンプレート
[編集]pmr
名前空間には、polymorphic_allocator
を使用するunordered_set
とunordered_multiset
のエイリアステンプレートが定義されています。
24.5.6 Unordered set
[編集]このセクションでは、unordered_set
クラステンプレートの詳細が記載されています。以下は簡単な説明です:
- コンストラクタ・メンバ関数
- キーの無順序集合を提供します。
- 要素の挿入・削除
insert
,erase
,find
などのメンバ関数が定義されています。- ハッシュポリシー
- バケットの数や負荷率の管理に関するメンバ関数があります。
24.5.7 Unordered multiset
[編集]このセクションでは、unordered_multiset
クラステンプレートの詳細が記載されています。unordered_set
と似ていますが、同じキーを持つ複数の要素を保持できる点が異なります。
これらの詳細については、C++標準仕様書の該当セクションを参照してください。これにより、C++プログラミングにおいて<unordered_set>
ヘッダーを適切に使用できるようになります。