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::GetHeadPositionCRBTree::GetNextCRBTree::GetNextValue などのメソッドを使用すると可能になります。 キーごとに潜在的に複数の値にアクセスするには、CRBMultiMap::FindFirstWithKeyCRBMultiMap::GetNextValueWithKeyCRBMultiMap::GetNextWithKey メソッドを使用すると可能になります。 実際の図については、CRBMultiMap::CRBMultiMap の例を参照してください。

KTraits および VTraits パラメーターは、要素のコピーまたは移動に必要な補足コードを含む特性クラスです。

CRBMultiMapCRBTree から派生し、赤黒アルゴリズムを使ってバイナリ ツリーを実装します。 CRBMultiMapCRBMap の代替手段が CAtlMap クラスにより提供されます。 ごく少数の要素を格納する必要がある場合は、代わりに CSimpleMap クラスを使用することを検討してください。

さまざまなコレクション クラスとその機能およびパフォーマンス特性の詳細については、「ATL コレクション クラス」を参照してください。

継承階層

CRBTree

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 への以前の呼び出しのいずれかで得られる位置の値。

key
検索する要素を識別するキーを指定します。

戻り値

指定されたキーに関連付けられている要素ペアを返します。

解説

位置の値は、キーに関連付けられている次の値を指すように更新されます。 これ以上値が存在しない場合、位置の値は 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 への以前の呼び出しのいずれかで得られる位置の値。

key
検索する要素を識別するキーを指定します。

戻り値

指定されたキーに関連付けられている、次の 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 の例を参照してください。

関連項目

CRBTree クラス
CAtlMap クラス
CRBMap クラス
クラスの概要