コンテンツにスキップ

C++/標準ライブラリ/unordered map

出典: フリー教科書『ウィキブックス(Wikibooks)』

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)[編集]

  1. <unordered_map> ヘッダーはクラステンプレート unordered_map および unordered_multimap を定義し、<unordered_set> ヘッダーは unordered_set および unordered_multiset を定義します。
  2. 24.4.1 で定義された展開専用のエイリアステンプレート(iter-value-typeiter-key-typeiter-mapped-typeiter-to-alloc-typerange-key-typerange-mapped-typerange-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_mapunordered_multimap クラステンプレート、比較演算子、swap関数、削除関数、および pmr 名前空間でのポリモーフィックアロケータを使ったバージョンが定義されています。

24.5.4 Unordered map[編集]

このセクションでは、unordered_map クラステンプレートの詳細が記載されています。以下は簡単な説明です。

コンストラクタ・メンバ関数
キーと値を持つハッシュテーブルを提供します。
要素の挿入・削除
insert, erase, find などのメンバ関数が定義されています。
ハッシュポリシー
バケットの数や負荷率の管理に関するメンバ関数があります。

24.5.5 Unordered multimap[編集]

このセクションでは、unordered_multimap クラステンプレートの詳細が記載されています。unordered_map と似ていますが、同じキーを持つ複数の要素を保持できる点が異なります。

この解説は、C++標準仕様書に基づいており、具体的なクラス定義や関数の詳細については、仕様書の該当セクションを参照してください。