コンテンツにスキップ

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

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

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_setunordered_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_ifunordered_setおよびunordered_multiset用に定義されています。削除された要素の数を返します。

5. pmr名前空間のエイリアステンプレート[編集]

  • pmr名前空間には、polymorphic_allocatorを使用するunordered_setunordered_multisetのエイリアステンプレートが定義されています。

24.5.6 Unordered set[編集]

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

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

24.5.7 Unordered multiset[編集]

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

これらの詳細については、C++標準仕様書の該当セクションを参照してください。これにより、C++プログラミングにおいて<unordered_set>ヘッダーを適切に使用できるようになります。