C++の標準ライブラリに含まれる「<unordered_map>」ヘッダーについての解説は、C++の標準仕様書候補(ISO/IEC JTC1/SC22/WG21 N4950)の24.5セクションで詳述されています。以下はその解説です。
24.5 Unordered associative containers (unord)
編集このセクションは、無順序連想コンテナ(unordered associative containers)に関する説明を行っています。
24.5.1 In general (unord.general)
編集<unordered_map>
ヘッダーはクラステンプレートunordered_map
およびunordered_multimap
を定義し、<unordered_set>
ヘッダーはunordered_set
およびunordered_multiset
を定義します。- 24.4.1 で定義された展開専用のエイリアステンプレート(
iter-value-type
、iter-key-type
、iter-mapped-type
、iter-to-alloc-type
、range-key-type
、range-mapped-type
、range-to-alloc-type
)が無順序コンテナの推論ガイドに現れることがあります。
24.5.2 Header <unordered_map> synopsis (unord.map.syn)
編集このサブセクションは <unordered_map>
ヘッダーの概要を示しています。以下の内容が含まれます:
#include <compare> // see 17.11.1 #include <initializer_list> // see 17.10.2 namespace std { // 24.5.4, class template unordered_map template<class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>, class Alloc = allocator<pair<const Key, T>>> class unordered_map; // 24.5.5, class template unordered_multimap template<class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>, class Alloc = allocator<pair<const Key, T>>> class unordered_multimap; // Comparison operators template<class Key, class T, class Hash, class Pred, class Alloc> bool operator==(const unordered_map<Key, T, Hash, Pred, Alloc>& a, const unordered_map<Key, T, Hash, Pred, Alloc>& b); template<class Key, class T, class Hash, class Pred, class Alloc> bool operator==(const unordered_multimap<Key, T, Hash, Pred, Alloc>& a, const unordered_multimap<Key, T, Hash, Pred, Alloc>& b); // Swap functions template<class Key, class T, class Hash, class Pred, class Alloc> void swap(unordered_map<Key, T, Hash, Pred, Alloc>& x, unordered_map<Key, T, Hash, Pred, Alloc>& y) noexcept(noexcept(x.swap(y))); template<class Key, class T, class Hash, class Pred, class Alloc> void swap(unordered_multimap<Key, T, Hash, Pred, Alloc>& x, unordered_multimap<Key, T, Hash, Pred, Alloc>& y) noexcept(noexcept(x.swap(y))); // Erasure functions template<class K, class T, class H, class P, class A, class Predicate> typename unordered_map<K, T, H, P, A>::size_type erase_if(unordered_map<K, T, H, P, A>& c, Predicate pred); template<class K, class T, class H, class P, class A, class Predicate> typename unordered_multimap<K, T, H, P, A>::size_type erase_if(unordered_multimap<K, T, H, P, A>& c, Predicate pred); namespace pmr { template<class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>> using unordered_map = std::unordered_map<Key, T, Hash, Pred, polymorphic_allocator<pair<const Key, T>>>; template<class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>> using unordered_multimap = std::unordered_multimap<Key, T, Hash, Pred, polymorphic_allocator<pair<const Key, T>>>; } }
ここでは、unordered_map
と unordered_multimap
クラステンプレート、比較演算子、swap関数、削除関数、および pmr
名前空間でのポリモーフィックアロケータを使ったバージョンが定義されています。
24.5.4 Unordered map
編集このセクションでは、unordered_map
クラステンプレートの詳細が記載されています。以下は簡単な説明です。
- コンストラクタ・メンバ関数
- キーと値を持つハッシュテーブルを提供します。
- 要素の挿入・削除
insert
,erase
,find
などのメンバ関数が定義されています。- ハッシュポリシー
- バケットの数や負荷率の管理に関するメンバ関数があります。
24.5.5 Unordered multimap
編集このセクションでは、unordered_multimap
クラステンプレートの詳細が記載されています。unordered_map
と似ていますが、同じキーを持つ複数の要素を保持できる点が異なります。
この解説は、C++標準仕様書に基づいており、具体的なクラス定義や関数の詳細については、仕様書の該当セクションを参照してください。