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

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

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

## rw_hashmap

### 形式

      #include <rw/rwstl/hashmap.h>
      rw_hashmap<K,V,Hash,EQ> map;

### 説明

  クラス rw_hashmap<K,V,Hash,EQ> は、ハッシュテーブル `pair<const K,V>` として実装されている `K` と `V` 間のマッピングのコレクションを維持します。重複キーを持つペアは許可されていません。それぞれの最初の要素に対して行った `EQ` 比較が `TRUE` の場合に、2 つのペアが重複キーを持ちます。これは値にもとづくコレクションであるため、オブジェクトはコレクションとの間でコピーされます。ANSI 関連コンテナ仕様に適合するすべてのクラス同様、rw_hashmap はその要素を参照する反復子を提供します。rw_hashmap の内容を変更する操作によって、コンテナを参照する他の反復子が無効になる可能性があります。rw_hashmap の内容は擬似ランダム順になっているため、`equal_range(key)` を呼び出した結果だけが通常意味を持つ反復子範囲であり、全体の範囲は `begin()` から `end()` までです。

### 持続性

  なし

### 公開 Typedef

      typedef K                  key_type;
      typedef Hash               key_hash;
      typedef EQ                 key_equal;
      typedef pair<K,V>          value_type; // または ... "const K"
      typedef (unsigned)         size_type; // rw_slist から
      typedef (int)              difference_type; // rw_slist から
      typedef (value_type&)      reference;
      typedef (const value_type&) const_reference; //  rw_slist から

    rw_hashmap<K,V,Hash,EQ> の反復子は順方向の反復子です

      typedef (scoped Iterator)      iterator;
      typedef (scoped ConstIterator)  const_iterator;

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

      rw_hashmap<K,V,Hash,EQ>(size_type sz = 1024,
                              const Hash& h = Hash(),
                              const EQ& eq = EQ());

    `h` をハッシュオブジェクトとして、`eq` を等値比較演算子として使用して、`sz` スロットを持つ空の rw_hashmap<K,V,Hash,EQ> を作成します。

      rw_hashmap<K,V,Hash,EQ>(const rw_hashmap<K,V,Hash,EQ>& map);

    `map` のコピーである rw_hashmap<K,V,Hash,EQ> を作成します。`map` から各要素が自分自身内にコピーされます。

      rw_hashmap<K,V,Hash,EQ>(const_iterator first,
                              const_iterator bound
                              size_type sz=1024,
                              const Hash& h = Hash(),
                              const EQ& eq = EQ());

    `h` をハッシュオブジェクトとして、`eq` を等値比較演算子として使用し、`first` で始まり `bound` で区切られる範囲で参照される各ペアのコピーを収めて、`sz` スロットを持つ rw_hashmap<K,V,Hash,EQ> を作成します。

      rw_hashmap<K,V,Hash,EQ>(const value_type* first,
                              const value_type* bound
                              size_type sz=1024,
                              const Hash& h = Hash(),
                              const EQ& eq = EQ());

    `h` をハッシュオブジェクトとして、`eq` を等値比較演算子として使用し、`first` で始まり `bound` で区切られる範囲で参照される各ペアのコピーを収めて、`sz` スロットを持つ rw_hashmap<K,V,Hash,EQ> を作成します。ペアの `K` 部分が `EQ` に一致する範囲に項目があれば、そのような項目の最初の項目だけが自分自身内に挿入されます。

### 公開デストラクタ

      ~rw_hashmap<K,V,Hash,EQ>();

    デストラクタは、コンテナの実装で使用されていたメモリーを解放します。

### 公開演算子

      rw_hashmap<K,V,Hash,EQ>&
      operator=(const rw_hashmap<K,V,Hash,EQ>& rhs);

    容量、`Hash`、`EQ` が `rhs` と同じになるように自分自身を設定し、自分自身の現在の内容をすべて削除して `rhs` 内の要素のコピーに置き換えます。

      bool
      operator==(const rw_hashmap<K,V,Hash,EQ> & rhs) const;

    自分自身と `rhs` の要素数が同じで、かつ自分自身内の各 `value_type` について、その最初の部分に対して自分自身内の EQ オブジェクトが `TRUE` を返し、2 番目の部分に対して `operator==()` が `TRUE` を返す `value_type` が `rhs` にある場合に、`TRUE` を返します。両方の部分をテストする必要があるということは、この演算子が後述する関数 `equal_by_keys()` よりやや低速であることを意味します。

      V&
      operator[](const key_type& key);

    自分自身内に保持している `key` に対して `EQ` 部分を持つペアの `V` 部分への参照を、そのようなペアを検索するか挿入することによって (この場合、そのデフォルトコンストラクタによって作成されたインスタンス `V` への参照) 返します。

### アクセサー関数

      iterator
      begin();

    返される反復子は、自分自身内の最初の項目を参照します。自分自身が空の場合、反復子は `end()` に等しくなります。項目は擬似ランダム順に格納されているため、この反復子は自分自身内に格納されている項目をどれでも参照する可能性があるので注意してください。

      const_iterator
      begin() const;

    返される反復子は、自分自身内の最初の項目を参照します。自分自身が空の場合、反復子は `end()` に等しくなります。項目は擬似ランダム順に格納されるため、この反復子は自分自身内に格納されている項目をどれでも参照する可能性があるので注意してください。

      iterator
      end();

    返される反復子は、自分自身の「終端を越えた」位置にマークを付けます。間接参照されないことがあります。

      const_iterator
      end() const;

    返される反復子は、自分自身の「終端を越えた」位置にマークを付けます。間接参照されないことがあります。

      pair<const_iterator, const_iterator>
      equal_range(const key_type key) const;

    `pair<const_iterator, const_iterator>(lower_bound(key), upper_bound(key))` を返します。上限と下限には、ハッシュにもとづくコレクションに対して特別な意味があります。該当する箇所を参照してください。

      pair<iterator, iterator>
      equal_range(const key_type key);

    `pair<iterator, iterator>(lower_bound(key), upper_bound(key))` を返します。上限と下限には、ハッシュにもとづくコレクションに対して特別な意味があります。該当する箇所を参照してください。

      const_iterator
      lower_bound(const key_type& key) const;

    自分自身内の `key` の下限を返します。これには、ハッシュにもとづくコレクションに対して特別な意味があります。該当する箇所を参照してください。

      iterator
      lower_bound(const key_type& key);

    自分自身内の `key` の下限を返します。これには、ハッシュにもとづくコレクションに対して特別な意味があります。該当する箇所を参照してください。

      const_iterator
      upper_bound(const key_type& key) const;

    自分自身内の `key` の上限を返します。これには、ハッシュにもとづくコレクションに対して特別な意味があります。該当する箇所を参照してください。

      iterator
      upper_bound(const key_type& key);

    自分自身内の `key` の上限を返します。これには、ハッシュにもとづくコレクションに対して特別な意味があります。該当する箇所を参照してください。

### Const 公開メンバー関数

      size_type
      capacity() const;

    自分自身が使用するハッシュテーブル内のスロット数を返します。

      bool
      empty() const;

    自分自身が空であれば `TRUE` を返します。

      float
      fill_ratio() const;

    `size()/capacity()` の計算の結果を返します。

      size_type
      size() const;

    自分自身が現在保持しているペア数を返します。

### 変異子 (mutator)

      void
      clear();

    `erase(begin(),end())` の同義語です。

      size_type
      erase(const key_type& key);

    最初の部分が `key` に等しいペアが自分自身内にあれば、そのペアは削除され、1 が返されます。それ以外の場合は 0 が返されます。

      iterator
      erase(iterator iter);

    `iter` で参照される要素を削除し、「次の」要素を参照する反復子を返します。`iter` が自分自身内の項目を参照しない場合、結果は定義されていません。

      iterator
      erase(iterator first, iterator bound);

    `first` で始まり `bound` で区切られる範囲の各要素を削除します。`bound` を参照する反復子を返します。`first` が自分自身内の項目を参照しない場合 (かつ `first` と `bound` が等しくない場合)、その影響は定義されていません。

      pair<iterator,bool>
      insert(const value_type& val);

    `val` の最初の部分に等しい最初の部分を持つペアが自分自身内にない場合は `val` を挿入し、新しい要素を参照する反復子を持つペアと `TRUE` を返します。それ以外の場合、一致する `value_type` を参照する反復子を持つペアと `FALSE` を返します。

      size_type
      insert(iterator ignore, const value_type& val);

    `val` の最初の部分に等しい最初の部分を持つペアが自分自身内にない場合は `val` を挿入し、1 を返します。それ以外の場合は何もしないで、0 を返します。最初の引数は ANSI 関連コンテナ仕様に適合させるためだけのもので、ハッシュテーブルの検索は一定の時間で実行されるため、メソッドでは無視されます。

      size_type
      insert(const value_type* first, const value_type* bound);

    `first` で始まり `bound` で区切られる範囲の各要素について、その要素の最初の部分に等しい最初の部分を持つペアが自分自身内にない場合は、要素が自分自身内にコピーされます。そのようなペアがある場合は、要素はスキップされます。挿入された要素数を返します。

      size_type
      insert(const_iterator first, const_iterator bound);

    `first` で始まり `bound` で区切られる範囲の各要素について、その要素の最初の部分に等しい最初の部分を持つペアが自分自身内にない場合は、要素が自分自身内にコピーされます。そのようなペアがある場合は、要素はスキップされます。挿入された要素数を返します。

      void
      swap(rw_hashmap<K,V,Hash,EQ>& other);

    `Hash` オブジェクトと `EQ` オブジェクトを含め、`other` と自分自身の内容を交換します。このメソッドは、交換される項目をコピーしたり破壊するのではなく、基礎となるハッシュテーブルを交換します。

### マップ用の特殊メソッド

      size_type
      count(const key_type& key) const;

    自分自身内に最初の要素が `key` に等しいペアがあれば `1` を返し、ない場合は `0` を返します。

      bool
      equal_by_keys(const rw_hashmap<K,V,Hash,EQ>& rhs) const;

    自分自身と `rhs` のサイズが同じ場合、かつ自分自身内の各 `value_type` について、ペアの最初の部分に対して呼び出されたとき自分自身内の EQ オブジェクトが `TRUE` を返すような `value_type` が `rhs` 内にある場合に、`TRUE` を返します。このメソッドは、項目ペアの `V` (第 2 の) 部分を比較しないため、`operator==()` よりやや高速に動作します。

      const_iterator
      find(const key_type& key) const;

    最初の要素として `key` を持つペアが自分自身内にある場合、そのようなペアを参照する `const_iterator` を返し、ない場合は `end()` を返します。

      iterator
      find(const key_type& key);

    最初の要素として `key` を持つペアが自分自身内にある場合、そのようなペアを参照する反復子を返し、ない場合は `end()` を返します。

      void
      resize(size_type sz);

    `sz` スロットを持てるように、自分自身のハッシュテーブルのサイズを変更します。自分自身の要素をすべて、新しいテーブルにハッシュします。自分自身が保持している要素が多い場合は、大変時間がかかる可能性があります。