Tools.h++ 7.0 クラスライブラリ・リファレンスマニュアル: RWTValHashSet

バナーをクリックすれば目次に戻ります

Copyright 1999 Rogue Wave Software
Copyright 1999 Sun Microsystems, Inc.

## RWTValHashSet<T,H,EQ>

### 形式

      #include <rw/tvhset.h>
      RWTValHashSet<T,H,EQ> s;

  > 注 - 標準 C++ ライブラリがある場合は、ここで述べるインタフェースを使用します。標準 C++ ライブラリがない場合は、付録 A に記載する RWTValHashSet に制限されたインタフェースを使用してください。

### 説明

  このクラスは、型 `H` のハッシュオブジェクトに従って格納される値のコレクションを維持します。`H` は、次の公開メンバーを介して、型 `T` の要素に対するハッシュ機能を提供しなければなりません。

          unsigned long operator()(const T& x) const

  コレクション中のオブジェクトは、型 `EQ` の同等オブジェクトにもとづいてグループ化されます。`EQ` は、次の公開メンバーを介して、このグループ化を保証しなければなりません。

          bool operator()(const T& x, const T& y) const

  これは、`x` と `y` が等しい場合に `TRUE` を返し、それ以外の場合は `FALSE` を返します。

  RWTValHashSet<T,H,EQ> は、コレクション内の既存の項目と等しい項目は受け付けません (RWTValHashMultiSet<T,H,EQ> には、互いに等しい複数の項目を含めることができます)。等しいかどうかは、`==` 演算子ではなく、同等オブジェクトにもとづいて判定されます。

### 持続性

  同形

### 例

      //
      // tvhsstr.cpp
      //
      #include <rw/tvhset.h>
      #include <rw/cstring.h>
      #include <iostream.h>

      struct silly_hash{
         unsigned long operator()(RWCString x) const
         { return x.length() * (long)x(0); }
      };

      main(){
      RWTValHashSet<RWCString,silly_hash,equal_to<RWCString> > set1;
      RWTValHashSet<RWCString,silly_hash,equal_to<RWCString> > set2;

        set1.insert("one");
        set1.insert("two");
        set1.insert("three");
      //拒絶された。重複不可
        set1.insert("one");

        cout << set1.entries() << endl;  // 「3」を出力する

        set2.insert("one");
        set2.insert("five");

      //拒絶された。重複不可
        set2.insert("one");

        cout << ((set1.isEquivalent(set2)) ? "TRUE" : "FALSE") << endl;
        // 「FALSE」を出力する

        set2.intersection(set1);

        set1.clear();
        cout << set1.entries() << endl;    // 「0」を出力する
        cout << set2.entries() << endl;    // 「1」を出力する

        return 0;
      }

### 関連クラス

  クラス RWTValHashMultiSet<T,H,EQ> は、互いに等しい複数の項目を受け付けるコレクションに対して同じインタフェースを提供します。

  クラス rw_hashset<T,H,EQ> は、RWTValHashSet<T,H,EQ> の基礎となる実装として使用される C++ 標準準拠コレクションです。

### 公開 Typedef

      typedef rw_hashset<T,H,EQ>                     container_type;
      typedef container_type::iterator               iterator;
      typedef container_type::const_iterator         const_iterator;
      typedef container_type::size_type              size_type;
      typedef T                                      value_type;
      typedef T&                                     reference;
      typedef const T&                               const_reference;

### 公開コンストラクタ

      RWTValHashSet<T,H,EQ>
      (size_type sz = 1024,const H& h = H(),const EQ& eq= EQ());

    空のセットを作成します。基礎となるハッシュテーブル表現は、`sz` バケットを持ち、`h` をハッシング関数として使用し、`eq` を要素間の等価性をテストするのに使用します。

      RWTValHashSet<T,H,EQ>(const rw_hashset<T,H,EQ>& s);

    `s` のすべての要素をコピーすることによって、セットを作成します。

      RWTValHashSet<T,H,EQ>(const RWTValHashSet<T,H,EQ>& rws);

    コピーコンストラクタ。

      RWTPtrHashSet<T,H,EQ>
      (const H& h,size_type sz = RWDEFAULT_CAPACITY);

    ハッシュオブジェクト `h` を使用し、初期ハッシュテーブル容量 `sz` を持つ空のハッシュセットを作成します。

      RWTValHashSet<T,H,EQ>(const T* first,const T* last,
        size_type sz = 1024,const H& h = H(),const EQ& eq = EQ());

    `first` が指す `T` の配列から `last` が指す要素まで (ただし、その要素は含みません)、要素をコピーすることによって、セットを作成します。基礎となるハッシュテーブル表現は、`sz` バケットを持ち、`h` をハッシング関数として使用し、`eq` を要素間の等価性をテストするのに使用します。

### 公開メンバー演算子

      RWTValHashSet<T,H,EQ>&
      operator=(const RWTValHashSet<T,H,EQ>& s);
      RWTValHashSet<T,H,EQ>&
      operator=(const rw_hashset<T,H,EQ>& s);

    自分自身のすべての要素を破棄し、`s` からすべての要素をコピーすることによって、それらを置き換えます。

      bool
      operator==(const RWTValHashSet<T,H,EQ>& s) const;
      bool
      operator==(const rw_hashset<T,H,EQ>& s) const;

    自分自身が `s` と等しい場合は `TRUE` を返し、それ以外の場合は `FALSE` を返します。2 つのコレクションのエントリ数が同じで、両方のコレクションを反復したときに個々の要素が互いに等しい場合、両者は等しいと言えます。

### 公開メンバー関数

      void
      apply(void (*fn)(const_reference,void*), void* d) const;

    `fn` が指すユーザー定義関数を、コレクション内の各項目に適用します。この関数は、次のプロトタイプを持っていなければなりません。

         void yourfun(const T& a, void* d);

    クライアントデータは、パラメタ `d` を通して渡すことができます。

      iterator
      begin();
      const_iterator
      begin() const;

    自分自身内の最初の要素の位置にある反復子を返します。

      size_type
      capacity() const;

    基礎となるハッシュ表現で使用可能なバケット (スロット) 数を返します。下記の `resize` を参照してください。

      void
      clear();

    自分自身から項目をすべて削除することによって、コレクションを消去します。各項目のデストラクタを呼び出します。

      bool
      contains(const_reference a) const;

    自分自身内に `a` と等しい要素 `t` が存在する場合は `TRUE` を返し、それ以外の場合は `FALSE` を返します。

      bool
      contains(bool (*fn)(const_reference,void*), void* d) const;

    自分自身内に式 `((*fn)(t,d))` が `TRUE` になるような要素 `t` が存在する場合は、`TRUE` を返します。それ以外の場合は、`FALSE` を返します。`fn` が指すユーザー定義テスター関数は、次のプロトタイプを持っていなければなりません。

         bool yourTester(const_reference a, void* d);

    クライアントデータは、パラメタ `d` を通して渡すことができます。

      void
      difference(const RWTValHashSet<T,H,EQ>& s);
      void
      difference(const rw_hashset<T,H,EQ>& s);

    `(self- s)` で与えられる差集合を、自分自身に設定します。

      iterator
      end();
      const_iterator
      end() const;

    自分自身内の最後の要素の「直後」にある反復子を返します。

      size_type
      entries() const;

    自分自身内の項目数を返します。

      float
      fillRatio() const;

    `entries()/capacity()` の比率を返します。

      bool
      find(const_reference a, value_type& k) const;

    自分自身内に `a` と等しい要素 `t` が存在する場合は、`t` を `k` に代入し、`TRUE` を返します。それ以外の場合は、`FALSE` を返し、`k` の値は変更しません。

      bool
      find(bool (*fn)(const_reference,void*), void* d,
           value_type& k) const;

    自分自身内に式 `((*fn)(t,d))` が `TRUE` になるような要素 `t` が存在する場合は、`t` を `k` に代入し、`TRUE` を返します。それ以外の場合は、`FALSE` を返し、`k` の値は変更しません。`fn` が指すユーザー定義テスター関数は、次のプロトタイプを持っていなければなりません。

         bool yourTester(const_reference a, void* d);

    クライアントデータは、パラメタ `d` を通して渡すことができます。

      bool
      insert(const_reference a);

    項目 `a` をコレクションに追加します。挿入が正常に行われた場合は `TRUE` を返し、それ以外の場合は `FALSE` を返します。コレクションが同値キーを持つ要素を持たない限り、この関数は `TRUE` を返します。

      void
      intersection(const RWTValHashSet<T,H,EQ>& rhs);
      void
      intersection(const rw_hashset<T,H,EQ>& rhs);

    自分自身を破壊し、自分自身と `rhs` の積集合を計算し、自分自身の内容を結果に置き換えます。

      bool
      isEmpty() const;

    コレクション内に項目が存在しない場合は `TRUE` を返し、それ以外の場合は `FALSE` を返します。

      bool
      isEquivalent(const RWTValHashSet<T,H,EQ>& s) const;

    自分自身と `s` が集合的に等しい場合は `TRUE` を返し、それ以外の場合は `FALSE` を返します。

      bool
      isProperSubsetOf(const RWTValHashSet<T,H,EQ>& s) const;

    自分自身が `s` の真部分集合の場合は `TRUE` を返し、それ以外の場合は `FALSE` を返します。

      bool
      isSubsetOf(const RWTValHashSet<T,H,EQ>& s) const;

    自分自身が `s` の部分集合である場合、あるいは自分自身が `s` と集合的に等しい場合は `TRUE` を返し、それ以外の場合は `FALSE` を返します。

      size_type
      occurrencesOf(const_reference a) const;

    `*a` と等しい自分自身内の要素 `t` の数を返します。

      size_type
      occurrencesOf
      (bool (*fn)(const_reference,void*),void* d) const;

    式 `((*fn)(t,d))` が `TRUE` になるような自分自身内の要素 `t` の数を返します。`fn` が指すユーザー定義テスター関数は、次のプロトタイプを持っていなければなりません。

         bool yourTester(const_reference a, void* d);

    クライアントデータは、パラメタ `d` を通して渡すことができます。

      bool
      remove(const_reference a);

    `a` と等しい自分自身内の最初の要素 `t` を削除します。そのような要素が存在しない場合は、`FALSE` を返します。

      bool
      remove(bool (*fn)(const_reference,void*), void* d);

    式 `((*fn)(t,d))` が `TRUE` になるような自分自身内の最初の要素 `t` を削除し、`TRUE` を返します。そのような要素が存在しない場合は、`FALSE` を返します。`fn` が指すユーザー定義テスター関数は、次のプロトタイプを持っていなければなりません。

         bool yourTester(const_reference a, void* d);

    クライアントデータは、パラメタ `d` を通して渡すことができます。

      size_type
      removeAll(const_reference a);

    `a` と等しい自分自身内の要素 `t` をすべて削除します。削除した項目数を返します。

      size_type
      removeAll(bool (*fn)(const_reference,void*), void* d);

    式 `((*fn)(t,d))` が `TRUE` になるような自分自身内の要素 `t` をすべて削除します。削除した項目数を返します。`fn` が指すユーザー定義テスター関数は、次のプロトタイプを持っていなければなりません。

         bool yourTester(const_reference a, void* d);

    クライアントデータは、パラメタ `d` を通して渡すことができます。

      void
      resize(size_type sz);

    `sz` の容量を用いて新しいハッシュセットを作成することによって、自分自身の容量を変更します。次に、`resize` は、自分自身のすべての要素を新しいコンテナにコピーし、最後に、その新しいコンテナの内部表現を自分自身の内部表現と交換します。

      rw_hashset<T,H,EQ>&
      std();
      const rw_hashset<T,H,EQ>&
      std() const;

    自分自身に対する実装として使用される、基礎となるコレクションへの参照を返します。この参照は自由に使用でき、C++ 標準インタフェースへのアクセスを提供したり、C++ 標準コレクションを利用する他のソフトウェアソフトウェアコンポーネントとの相互運用性を提供します。

      void
      symmetricDifference(const RWTValHashSet<T,H,EQ>& s);
      void
      symmetricDifference(const rw_hashset<T,H,EQ>& s);

    自分自身を破壊し、自分自身と `s` の対称差集合を計算します。自分自身は結果に置き換えられます。対称差は (AB)-(AB) として定義することができます。

      void
      Union(const RWTValHashSet<T,H,EQ>& s);
      void
      Union(const rw_hashsett<T,H,EQ>& s);

    自分自身を破壊し、自分自身と `s` の和集合を計算します。自分自身は結果に置き換えられます。C++ の予約語との競合を避けるために、`Union` の「U」に大文字を使用していることに注意してください。

### 関連の大域演算子

      RWvostream&
      operator<<(RWvostream& strm,
             const RWTValHashSet<T,H,EQ>& coll);
      RWFile&
      operator<<(RWFile& strm, const RWTValHashSet<T,H,EQ>& coll);

    出力ストリーム `strm` にコレクション `coll` を保存するか、すでに保存されている場合は、そのコレクションに対する参照を保存します。

      RWvistream&
      operator>>(RWvistream& strm, RWTValHashSet<T,H,EQ>& coll);
      RWFile&
      operator>>(RWFile& strm, RWTValHashSet<T,H,EQ>& coll);

    コレクション `coll` の内容を入力ストリーム `strm` から復元します。

      RWvistream&
      operator>>(RWvistream& strm, RWTValHashSet<T,H,EQ>*& p);
      RWFile&
      operator>>(RWFile& strm, RWTValHashSet<T,H,EQ>*& p);

    入力ストリーム `strm` 上の次のオブジェクトを調べて、ヒープから新しいコレクションを作成してそれを指すように `p` を設定するか、または前に読み込んだインスタンスを指すように `p` を設定します。コレクションをヒープから作成した場合、ユーザーはそれを削除する責任があります。