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

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


rw_hashmultimap

形式

#include <rw/rwstl/hashmmap.h>
rw_hashmultimap<K,V,Hash,EQ> mmap;

説明

クラス rw_hashmultimap<K,V,Hash,EQ> は、同じ K インスタンスを持つペアが多数存在する可能性のある pair<const K,V> のハッシュテーブルとして実装されている KV 間のマッピングのコレクションを維持します。これは値にもとづくコレクションであるため、オブジェクトはコレクションとの間でコピーされます。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_hashmultimap<K,V,Hash,EQ> の反復子は順方向反復子です。

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

公開コンストラクタ

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

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

rw_hashmultimap<K,V,Hash,EQ>(const
                         rw_hashmultimap<K,V,Hash,EQ>& mmap);

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

rw_hashmultimap<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_hashmultimap<K,V,Hash,EQ> を作成します。

rw_hashmultimap<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_hashmultimap<K,V,Hash,EQ> を作成します。

公開デストラクタ

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

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

公開演算子

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

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

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

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

アクセサー関数

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;

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

変異子

void
clear();

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

size_type
erase(const key_type& key);

最初の部分が key と等しい自分自身内のすべてのペアを削除し、削除した要素数を返します。

iterator
erase(iterator iter);

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

iterator
erase(iterator first, iterator bound);

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

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

ペア val を挿入し、新しい要素を参照する反復子を持つペアと TRUE を返します。

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

ペア val を挿入し、1 を返します。最初の引数は 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_hashmultimap<K,V,Hash,EQ>& other);

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

マルチマップ用の特殊メソッド

size_type
count(const key_type& key) const;

最初の要素と等しい key を持つ自分自身内のペア数を返します。

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

自分自身と rhs のサイズが同じ場合、かつ自分自身内の各 key_type について、自分自身と rhs がそのインスタンスと EQ をテストした最初の部分と同じペア数を持つ場合に、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 スロットを持てるように、自分自身のハッシュテーブルのサイズを変更します。自分自身の要素をすべて、新しいテーブルにハッシュします。自分自身が保持している要素が多い場合は、大変時間がかかる可能性があります。