CRBMultiMap クラス
このクラスは、各キーを複数の値に関連付けることができるマッピング構造を、赤黒バイナリ ツリーを使って表します。
構文
template<typename K,
typename V,
class KTraits = CElementTraits<K>,
class VTraits = CElementTraits<V>>
class CRBMultiMap : public CRBTree<K, V, KTraits, VTraits>
パラメーター
K
キー要素の型。
V
値要素の型。
KTraits
キー要素をコピーまたは移動するために使用されるコード。 詳細については、「CElementTraits クラス」を参照してください。
VTraits
値要素をコピーまたは移動するために使用されるコード。
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CRBMultiMap::CRBMultiMap | コンストラクター。 |
CRBMultiMap::~CRBMultiMap | デストラクター。 |
パブリック メソッド
名前 | 説明 |
---|---|
CRBMultiMap::FindFirstWithKey | 指定されたキーを持つ最初の要素の位置を検索するには、このメソッドを呼び出します。 |
CRBMultiMap::GetNextValueWithKey | 指定されたキーに関連付けられている値を取得し、位置の値を更新するには、このメソッドを呼び出します。 |
CRBMultiMap::GetNextWithKey | 指定されたキーに関連付けられている要素を取得し、位置の値を更新するには、このメソッドを呼び出します。 |
CRBMultiMap::Insert | このメソッドを呼び出すと、マップに要素ペアを挿入できます。 |
CRBMultiMap::RemoveKey | 指定されたキーのすべてのキーまたは値要素を削除するには、このメソッドを呼び出します。 |
解説
CRBMultiMap
により、指定された型のマッピング配列がサポートされ、キー要素と値の順序付けられた配列が管理されます。 CRBMap クラスとは異なり、各キーを複数の値に関連付けることができます。
要素 (キーと値で構成される) は、CRBMultiMap::Insert メソッドを使用してバイナリ ツリー構造に格納されます。 要素は CRBMultiMap::RemoveKey メソッドを使用して削除できます。このメソッドは、指定されたキーに一致する要素をすべて削除します。
ツリーの走査は、CRBTree::GetHeadPosition、CRBTree::GetNext、CRBTree::GetNextValue などのメソッドを使用すると可能になります。 キーごとに潜在的に複数の値にアクセスするには、CRBMultiMap::FindFirstWithKey、CRBMultiMap::GetNextValueWithKey、CRBMultiMap::GetNextWithKey メソッドを使用すると可能になります。 実際の図については、CRBMultiMap::CRBMultiMap の例を参照してください。
KTraits および VTraits パラメーターは、要素のコピーまたは移動に必要な補足コードを含む特性クラスです。
CRBMultiMap
は CRBTree から派生し、赤黒アルゴリズムを使ってバイナリ ツリーを実装します。 CRBMultiMap
と CRBMap
の代替手段が CAtlMap クラスにより提供されます。 ごく少数の要素を格納する必要がある場合は、代わりに CSimpleMap クラスを使用することを検討してください。
さまざまなコレクション クラスとその機能およびパフォーマンス特性の詳細については、「ATL コレクション クラス」を参照してください。
継承階層
CRBMultiMap
要件
ヘッダー: atlcoll.h
CRBMultiMap::CRBMultiMap
コンストラクター。
explicit CRBMultiMap(size_t nBlockSize = 10) throw();
パラメーター
nBlockSize
ブロック サイズ。
解説
nBlockSize パラメーターは、新しい要素が必要な場合に割り当てられるメモリ量の測定結果です。 ブロック サイズが大きくなると、メモリ割り当てルーチンの呼び出しは減少しますが、より多くのリソースが使用されます。 既定では、一度に 10 要素の領域が割り当てられます。
使用できるその他のメソッドの詳細については、基底クラス「CRBTree」のドキュメントを参照してください。
例
// Define a multimap object which has an integer
// key, a double value, and a block size of 5
CRBMultiMap<int, double> myMap(5);
// Add some key/values. Notice how three
// different values are associated with
// one key. In a CRBMap object, the values
// would simply overwrite each other.
myMap.Insert(0, 1.1);
myMap.Insert(0, 1.2);
myMap.Insert(0, 1.3);
myMap.Insert(1, 2.1);
// Look up a key and iterate through
// all associated values
double v;
POSITION myPos = myMap.FindFirstWithKey(0);
while (myPos != NULL)
{
v = myMap.GetNextValueWithKey(myPos,0);
// As the loop iterates, v
// contains the values 1.3, 1.2, 1.1
}
// Remove all of the values associated with that key
size_t i = myMap.RemoveKey(0);
// Confirm all three values were deleted
ATLASSERT(i == 3);
CRBMultiMap::~CRBMultiMap
デストラクター。
~CRBMultiMap() throw();
解説
割り当てられたすべてのリソースを解放します。
使用できるその他のメソッドの詳細については、基底クラス「CRBTree」のドキュメントを参照してください。
CRBMultiMap::FindFirstWithKey
指定されたキーを持つ最初の要素の位置を検索するには、このメソッドを呼び出します。
POSITION FindFirstWithKey(KINARGTYPE key) const throw();
パラメーター
key
検索する要素を識別するキーを指定します。
戻り値
キーが見つかった場合は最初のキーまたは値要素の POSITION を返し、それ以外の場合は NULL を返します。
解説
CRBMultiMap
内のキーには、1 つ以上の値を関連付けることができます。 このメソッドにより、その特定のキーに関連付けられている最初の値 (実際には唯一の値である可能性があります) の位置の値が提供されます。 返される位置の値は、CRBMultiMap::GetNextValueWithKey または CRBMultiMap::GetNextWithKey と一緒に使用して値を取得し、位置を更新できます。
使用できるその他のメソッドの詳細については、基底クラス「CRBTree」のドキュメントを参照してください。
例
CRBMultiMap::CRBMultiMap の例を参照してください。
CRBMultiMap::GetNextValueWithKey
指定されたキーに関連付けられている値を取得し、位置の値を更新するには、このメソッドを呼び出します。
const V& GetNextValueWithKey(
POSITION& pos,
KINARGTYPE key) const throw();
V& GetNextValueWithKey(
POSITION& pos,
KINARGTYPE key) throw();
パラメーター
pos
CRBMultiMap::FindFirstWithKey または CRBMultiMap::GetNextWithKey への呼び出し、または GetNextValueWithKey
への以前の呼び出しのいずれかで得られる位置の値。
キー
検索する要素を識別するキーを指定します。
戻り値
指定されたキーに関連付けられている要素ペアを返します。
解説
位置の値は、キーに関連付けられている次の値を指すように更新されます。 これ以上値が存在しない場合、位置の値は NULL に設定されます。
使用できるその他のメソッドの詳細については、基底クラス「CRBTree」のドキュメントを参照してください。
例
CRBMultiMap::CRBMultiMap の例を参照してください。
CRBMultiMap::GetNextWithKey
指定されたキーに関連付けられている要素を取得し、位置の値を更新するには、このメソッドを呼び出します。
const CPair* GetNextWithKey(
POSITION& pos,
KINARGTYPE key) const throw();
CPair* GetNextWithKey(
POSITION& pos,
KINARGTYPE key) throw();
パラメーター
pos
CRBMultiMap::FindFirstWithKey または CRBMultiMap::GetNextValueWithKey への呼び出し、または GetNextWithKey
への以前の呼び出しのいずれかで得られる位置の値。
キー
検索する要素を識別するキーを指定します。
戻り値
指定されたキーに関連付けられている、次の CRBTree::CPair Class 要素を返します。
解説
位置の値は、キーに関連付けられている次の値を指すように更新されます。 これ以上値が存在しない場合、位置の値は NULL に設定されます。
使用できるその他のメソッドの詳細については、基底クラス「CRBTree」のドキュメントを参照してください。
CRBMultiMap::Insert
このメソッドを呼び出すと、マップに要素ペアを挿入できます。
POSITION Insert(KINARGTYPE key, VINARGTYPE value) throw(...);
パラメーター
key
CRBMultiMap
オブジェクトに追加するキー値。
value
key に関連付けられている、CRBMultiMap
オブジェクトに追加する値。
戻り値
CRBMultiMap
オブジェクト内のキーと値の要素のペアの位置を返します。
解説
使用できるその他のメソッドの詳細については、基底クラス「CRBTree」のドキュメントを参照してください。
例
CRBMultiMap::CRBMultiMap の例を参照してください。
CRBMultiMap::RemoveKey
指定されたキーのすべてのキーまたは値要素を削除するには、このメソッドを呼び出します。
size_t RemoveKey(KINARGTYPE key) throw();
パラメーター
key
削除する要素を識別するキーを指定します。
戻り値
指定されたキーに関連付けられている値の数を返します。
解説
RemoveKey
により、key に一致するキーを持つキーまたは値要素がすべて削除されます。
使用できるその他のメソッドの詳細については、基底クラス「CRBTree」のドキュメントを参照してください。
例
CRBMultiMap::CRBMultiMap の例を参照してください。