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

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

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

## RWHashDictionary

RWHashDictionary RWSet RWHashTable RWCollection RWCollectable

### 形式

      typedef RWHashDictionary Dictionary;  // Smalltalk typedef.
      #include <rw/hashdict.h>
      RWHashDictionary  a ;

### 説明

  このクラスは、外部キーでアクセスできる、順序付けられていない値の集合を表します。キーの重複は許可されていません。このクラスは、キーと値の関連情報から成るハッシュテーブルとして実装されます。キーと値は、キーに対して仮想関数 `hash()` および `isEqual()` を適切に定義した、抽象基底クラス RWCollectable から継承しなければなりません。

  このクラスは、Smalltalk のクラス Dictionary に対応しています。

### 持続性

  なし

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

      RWHashDictionary(size_t n = RWDEFAULT_CAPACITY);

    `n` 個のハッシュバケットから成る空のハッシュディクショナリを作成します。

      RWHashDictionary(const RWHashDictionary& hd);

    コピーコンストラクタ。コレクション `hd` のシャローコピーを作成します。

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

      void
      operator=(const RWHashDictionary& hd);

    代入演算子。コレクション `hd` のシャローコピーを作成します。

      RWBoolean
      operator<=(const RWHashDictionary& hd) const;

    自分自身の各キーと値の対について `hd` 内に `isEqual` であるキーがあれば、`TRUE` を返します。またこのとき、対応する値も等しくなければなりません。

  > 注 - 標準 C++ ライブラリが存在する状態で RWHashDictionary から継承する場合、この演算子を変更し、明示的に関数を呼び出すことをお薦めします。C++ の多重定義による解決方法では、継承されたクラスメンバーを対象とする、標準ライブラリが提供する大域演算子を選択します。これらの大域定義は、部分集合関係のような半順序付けには適していません。

      RWBoolean
      operator==(const RWHashDictionary& hd) const;

    自分自身と `hd` が同じ数のエントリを持ち、かつ自分自身の各キーと値の対について `hd` 内に `isEqual` であるキーがあれば、`TRUE` を返します。またこのとき、対応する値も等しくなければなりません。

### 公開メンバー関数

      void
      applyToKeyAndValue(RWapplyKeyAndValue ap, void* x);

    コレクション内の各キーと値の対に対して、ユーザー定義関数 `ap` を適用します。項目に対して、特定の順序ではアクセスしません。特定の型でない引数 `x` を、 `ap` 関数に渡すことが可能です。

      RWBinaryTree
      asBinaryTree();
      RWBag
      asBag() const;
      RWSet
      asOrderedCollection() const;
      asSet() const;
      RWOrdered
      RWBinaryTree
      asSortedCollection() const;

    RWHashDictionary を RWBag、RWSet、RWOrdered、または RWBinaryTree に変換します。ディクショナリにはキーと値の対が含まれるので、この呼び出しの結果、RWCollectableAssociations を持つコンテナが生成されることに注意してください。また、返される値はデータのコピーであることにも注意してください。`operator+=()` を使用して、各 RWCollectableAssociation をこのディクショナリから選択したコレクションに挿入することを考慮してください。

      virtual RWspace
      binaryStoreSize() const;

    クラス RWCollection から継承した関数。

      virtual void
      clear();

    クラス RWCollection から再定義した関数。コレクション内のすべてのキーと値の対を取り除きます。

      virtual void
      clearAndDestroy();

    クラス RWCollection から再定義した関数。コレクション内のすべてのキーと値の対を取り除き、キーと値そのものも削除します。

      virtual int
      compareTo(const RWCollectable* a) const;

    クラス RWCollectable から継承した関数。

      virtual RWBoolean
      contains(const RWCollectable* target) const;

    クラス RWCollection から継承した関数。

      virtual size_t
      entries() const;

    クラス RWSet から継承した関数。

      virtual RWCollectable*
      find(const RWCollectable* target) const;

    クラス RWCollection から再定義した関数。オブジェクト `target` と `isEqual` であるキーを返します。等しいキーがなければ NULL を返します。

      RWCollectable*
      findKeyAndValue(const RWCollectable* target,
           RWCollectable*& v) const;

    `target` が指す項目と `isEqual` であるキーを返します。等しいキーがなければ NULL を返します。値は `v` に設定されます。この関数を呼び出す前に、ユーザーは `v` を定義しておく必要があります。

      RWCollectable*
      findValue(const RWCollectable* target) const;

    項目 `target` と `isEqual` であるキーの値を返します。等しいキーがなければ NULL を返します。

      RWCollectable*
      findValue(const RWCollectable* target,
      RWCollectable* newValue);

    項目 `target` と `isEqual` であるキーの、値を返します。等しいキーがなければ NULL を返します。キーが見つかった場合は、値を `newValue` に置き換えます。

      virtual unsigned
      hash() const;

    クラス `RWCollectable` から継承した関数。

      RWCollectable*
      insertKeyAndValue(RWCollectable* key,RWCollectable* value);

    キーと値の対をコレクションに追加し、処理が成功すればそのキーを返し、そのキーがすでにコレクション内に存在すれば NULL を返します。

      virtual RWClassID
      isA() const;

    クラス RWCollectable から再定義された関数で、`__RWHASHDICTIONARY` を返します。

      virtual RWBoolean
      isEmpty() const;

    クラス RWSet から継承した関数。

      virtual RWBoolean
      isEqual(const RWCollectable* a) const;

    RWCollectable から継承した関数。

      virtual size_t
      occurrencesOf(const RWCollectable* target) const;

    クラス RWSet から継承した関数。項目 `target` と `isEqual` であるキーの数を返します。キーの重複は許されないので、0 か 1 しか返しません。

      virtual RWCollectable*
      remove(const RWCollectable* target);

    クラス RWCollection から再定義した関数。項目 `target` と `isEqual` であるキーと、対応する値を一緒に取り除き、そのキーを返します。等しいキーがなければ NULL を返します。

      virtual void
      removeAndDestroy(const RWCollectable* target);

    クラス RWCollection から再定義した関数。項目 `target` と `isEqual` であるキーと、対応する値を一緒に削除します。キーと値そのものも削除します。等しいキーがなければ何も実行されません。

      RWCollectable*
      removeKeyAndValue(const RWCollectable* target,
           RWCollectable*& v);

    項目 `target` と `isEqual` であるキーと、対応する値を一緒に取り除き、そのキーを返します。等しいキーがなければ NULL を返します。値は `v` に設定されます。この関数を呼び出す前に、ユーザーは `v` を定義する必要があります。

      void
      resize(size_t n = 0);

    クラス RWSet から継承した関数。

      virtual void
      restoreGuts(RWvistream&);
      virtual void
      restoreGuts(RWFile&);
      virtual void
      saveGuts(RWvostream&) const;
      virtual void
      saveGuts(RWFile&) const;

    クラス RWCollection から継承した関数。

      virtual RWCollection*
      select(RWtestCollectable testfunc, void* x) const;

    RWHashDictionary における各項目のキーについて、`tst` が指す関数を評価します。この関数が `TRUE` を返す対象となるキーと値を、ヒープから割り当てられた新しい RWHashDictionary に挿入し、そしてこの新しいコレクションへのポインタを返します。新しいディクショナリはヒープから割り当てられるため、終了時これを削除する責任があります。これは、RWCollection から継承した非仮想関数を隠蔽する `virtual` 関数です。

      virtual RWCollection*
      select(RWtestCollectablePair testfunc, void* x) const;

    RWHashDictionary における各項目のキーおよび値について、`tst` が指す関数を評価します。この関数が `TRUE` を返す対象となるキーと値を、ヒープから割り当てられた新しい RWHashDictionary に挿入し、そしてこの新しいコレクションへのポインタを返します。新しいディクショナリはヒープから割り当てられるため、終了時これを削除する責任があります。これは、RWCollection から継承した非仮想関数を隠蔽する `virtual` 関数です。

      RWStringID
      stringID();

    (仮想関数として動作) クラス RWCollectable から継承した関数。