CMapStringToOb
クラス
一意の CString
オブジェクトを CObject
へのポインターに割り当てる辞書コレクション クラスです。
構文
class CMapStringToOb : public CObject
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CMapStringToOb::CMapStringToOb |
コンストラクターです。 |
パブリック メソッド
名前 | 説明 |
---|---|
CMapStringToOb::GetCount |
このマップ内の要素の数を返します。 |
CMapStringToOb::GetHashTableSize |
ハッシュ テーブル内の要素の現在の数を決定します。 |
CMapStringToOb::GetNextAssoc |
次に反復処理の対象となる要素が取得されます。 |
CMapStringToOb::GetSize |
このマップ内の要素の数を返します。 |
CMapStringToOb::GetStartPosition |
最初の要素の位置を返します。 |
CMapStringToOb::HashKey |
指定したキーのハッシュ値を計算します。 |
CMapStringToOb::InitHashTable |
ハッシュ テーブルを初期化します。 |
CMapStringToOb::IsEmpty |
空のマップ条件 (要素なし) をテストします。 |
CMapStringToOb::Lookup |
void ポインター キーに基づいて void ポインターを検索します。 ポインター値は、それが指すエンティティではなく、キー比較に使用されます。 |
CMapStringToOb::LookupKey |
指定したキー値に関連付けられているキーへの参照を返します。 |
CMapStringToOb::RemoveAll |
このマップからすべての要素を削除します。 |
CMapStringToOb::RemoveKey |
キーで指定された要素を削除します。 |
CMapStringToOb::SetAt |
マップに要素を挿入します。は、一致するキーが見つかった場合に既存の要素を置き換えます。 |
パブリック演算子
名前 | 説明 |
---|---|
CMapStringToOb::operator [ ] |
map に要素を挿入します。 SetAt の演算子の置換です。 |
解説
CString
- CObject*
ペア (要素) をマップに挿入したら、文字列またはCString
値をキーとして使用して、ペアを効率的に取得または削除できます。 マップ内のすべての要素を反復処理することもできます。
POSITION
型の変数は、すべてのマップ バリエーションの代替エントリ アクセスに使用されます。 POSITION
を使用して、エントリを "記憶" し、マップを反復処理できます。 この反復はキー値によって順番に行われると思われるかもしれません。そうじゃないです。 取得された要素のシーケンスは不確定です。
CMapStringToOb
には、IMPLEMENT_SERIAL
マクロが組み込まれており、その要素のシリアル化とダンプがサポートされます。 マップがアーカイブに格納されている場合、オーバーロードされた挿入 ( <<
) 演算子または Serialize
メンバー関数を使用して、各要素が順番にシリアル化されます。
マップ内の個々の要素 ( CString
値と CObject
の内容) の診断ダンプが必要な場合は、ダンプ コンテキストの深さを 1 以上に設定する必要があります。
CMapStringToOb
オブジェクトが削除されたとき、またはその要素が削除されると、CString
オブジェクトとCObject
ポインターが削除されます。 CObject
ポインターによって参照されるオブジェクトは破棄されません。
マップ クラスの派生は、リストの派生に似ています。 特殊な目的のリスト クラスの派生の図については、 Collections に関する記事を参照してください。
継承階層
CMapStringToOb
要件
ヘッダー: afxcoll.h
CMapStringToOb::CMapStringToOb
空の CString
対 CObject*
マップを構築します。
CMapStringToOb(INT_PTR nBlockSize = 10);
パラメーター
nBlockSize
マップを拡張するためのメモリ割り当ての粒度を指定します。
解説
マップが大きくなると、メモリは nBlockSize
エントリの単位で割り当てられます。
次の表に、 CMapStringToOb:: CMapStringToOb
のような他のメンバー関数を示します。
クラス | メンバー関数 |
---|---|
CMapPtrToPtr |
CMapPtrToPtr( INT_PTR nBlockSize = 10 ); |
CMapPtrToWord |
CMapPtrToWord( INT_PTR nBlockSize = 10 ); |
CMapStringToPtr |
CMapStringToPtr( INT_PTR nBlockSize = 10 ); |
CMapStringToString |
CMapStringToString( INT_PTR nBlockSize = 10 ); |
CMapWordToOb |
CMapWordToOb( INT_PTR nBlockSize = 10 ); |
CMapWordToPtr |
MapWordToPtr( INT_PTR nBlockSize = 10 ); |
例
CMapStringToOb map(20); // Map on the stack with blocksize of 20
CMapStringToOb *pm = new CMapStringToOb; // Map on the heap
// with default blocksize
すべてのコレクション例で使用されるCAge
クラスの一覧については、CObList::CObList
を参照してください。
CMapStringToOb::GetCount
マップ内の要素の数を決定します。
INT_PTR GetCount() const;
戻り値
このマップ内の要素の数。
解説
次の表に、 CMapStringToOb::GetCount
のような他のメンバー関数を示します。
クラス | メンバー関数 |
---|---|
CMapPtrToPtr |
INT_PTR GetCount() const; |
CMapPtrToWord |
INT_PTR GetCount() const; |
CMapStringToPtr |
INT_PTR GetCount() const; |
CMapStringToString |
INT_PTR GetCount() const; |
CMapWordToOb |
INT_PTR GetCount() const; |
CMapWordToPtr |
INT_PTR GetCount() const; |
例
すべてのコレクション例で使用されるCAge
クラスの一覧については、CObList::CObList
を参照してください。
CMapStringToOb map;
map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Homer"), new CAge(36));
ASSERT(map.GetCount() == 2);
CMapStringToOb::GetHashTableSize
ハッシュ テーブル内の要素の現在の数を決定します。
UINT GetHashTableSize() const;
戻り値
ハッシュ テーブル内の要素の数を返します。
解説
次の表に、 CMapStringToOb::GetHashTableSize
のような他のメンバー関数を示します。
クラス | メンバー関数 |
---|---|
CMapPtrToPtr |
UINT GetHashTableSize() const; |
CMapPtrToWord |
UINT GetHashTableSize() const; |
CMapStringToPtr |
UINT GetHashTableSize() const; |
CMapStringToString |
UINT GetHashTableSize() const; |
CMapWordToOb |
UINT GetHashTableSize() const; |
CMapWordToPtr |
UINT GetHashTableSize() const; |
CMapStringToOb::GetNextAssoc
rNextPosition
で map 要素を取得し、マップ内の次の要素を参照するようにrNextPosition
更新します。
void GetNextAssoc(
POSITION& rNextPosition,
CString& rKey,
CObject*& rValue) const;
パラメーター
rNextPosition
前の GetNextAssoc
または GetStartPosition
呼び出しによって返される POSITION 値への参照を指定します。
rKey
取得した要素の返されるキー (文字列) を指定します。
rValue
取得した要素 ( CObject
ポインター) の戻り値を指定します。 このパラメーターの詳細については、 Remarks を参照してください。
解説
この関数は、マップ内のすべての要素を反復処理する場合に最も便利です。 位置シーケンスは必ずしもキー値シーケンスと同じではないことに注意してください。
取得した要素がマップの最後の要素である場合、 rNextPosition
の新しい値は NULL
に設定されます。
rValue
パラメーターの場合は、次の例に示すように、必ずオブジェクト型をCObject*&
にキャストしてください。これはコンパイラが必要とします。
CObject *ob;
map.GetNextAssoc(pos, key, (CObject *&)ob);
これは、テンプレートに基づくマップの GetNextAssoc
には当てはまりません。
次の表に、 CMapStringToOb::GetNextAssoc
のような他のメンバー関数を示します。
クラス | メンバー関数 |
---|---|
CMapPtrToPtr | void GetNextAssoc( POSITION& rNextPosition , void*& rKey , void*& rValue ) const; |
CMapPtrToWord | void GetNextAssoc( POSITION& rNextPosition , void*& rKey , WORD& rValue ) const; |
CMapStringToPtr | void GetNextAssoc( POSITION& rNextPosition , CString& rKey , void*& rValue ) const; |
CMapStringToString | void GetNextAssoc( POSITION& rNextPosition , CString& rKey , CString& rValue ) const; |
CMapWordToOb | void GetNextAssoc( POSITION& rNextPosition , WORD& rKey , CObject*& rValue ) const; |
CMapWordToPtr | void GetNextAssoc( POSITION& rNextPosition , WORD& rKey , void*& rValue ) const; |
例
すべてのコレクション例で使用されるCAge
クラスの一覧については、CObList::CObList
を参照してください。
CMapStringToOb map;
POSITION pos;
CString key;
CAge *pa;
map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Lisa"), new CAge(11));
map.SetAt(_T("Homer"), new CAge(36));
map.SetAt(_T("Marge"), new CAge(35));
// Iterate through the entire map, dumping both name and age.
for (pos = map.GetStartPosition(); pos != NULL;)
{
map.GetNextAssoc(pos, key, (CObject *&)pa);
#ifdef _DEBUG
afxDump << key << _T(" : ") << pa << _T("\n");
#endif
}
このプログラムの結果は次のとおりです。
Lisa : a CAge at $4724 11
Marge : a CAge at $47A8 35
Homer : a CAge at $4766 36
Bart : a CAge at $45D4 13
CMapStringToOb::GetSize
マップ要素の数を返します。
INT_PTR GetSize() const;
戻り値
マップ内の項目の数。
解説
このメソッドを呼び出すと、マップ内の要素の数を取得できます。
次の表に、 CMapStringToOb::GetSize
のような他のメンバー関数を示します。
クラス | メンバー関数 |
---|---|
CMapPtrToPtr |
INT_PTR GetSize() const; |
CMapPtrToWord |
INT_PTR GetSize() const; |
CMapStringToPtr |
INT_PTR GetSize() const; |
CMapStringToString |
INT_PTR GetSize() const; |
CMapWordToOb |
INT_PTR GetSize() const; |
CMapWordToPtr |
INT_PTR GetSize() const; |
例
CMapStringToOb map;
map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Homer"), new CAge(36));
ASSERT(map.GetSize() == 2);
CMapStringToOb::GetStartPosition
GetNextAssoc
呼び出しに渡すことができるPOSITION
値を返すことによって、マップの反復処理を開始します。
POSITION GetStartPosition() const;
戻り値
マップを反復処理するための開始位置を示す POSITION
値。マップが空の場合は NULL
。
解説
反復シーケンスは予測できません。そのため、"マップ内の最初の要素" には特別な意味はありません。
次の表に、 CMapStringToOb::GetStartPosition
のような他のメンバー関数を示します。
クラス | メンバー関数 |
---|---|
CMapPtrToPtr |
POSITION GetStartPosition() const; |
CMapPtrToWord |
POSITION GetStartPosition() const; |
CMapStringToPtr |
POSITION GetStartPosition() const; |
CMapStringToString |
POSITION GetStartPosition() const; |
CMapWordToOb |
POSITION GetStartPosition() const; |
CMapWordToPtr |
POSITION GetStartPosition() const; |
例
CMapStringToOb::GetNextAssoc
の例を参照してください。
CMapStringToOb::HashKey
指定したキーのハッシュ値を計算します。
UINT HashKey(LPCTSTR key) const;
パラメーター
key
ハッシュ値を計算するキー。
戻り値
キーのハッシュ値
解説
次の表に、 CMapStringToOb::HashKey
のような他のメンバー関数を示します。
クラス | メンバー関数 |
---|---|
CMapPtrToPtr |
UINT HashKey( void *key ) const; |
CMapPtrToWord |
UINT HashKey( void *key ) const; |
CMapStringToString |
UINT HashKey( LPCTSTR key ) const; |
CMapStringToPtr |
UINT HashKey( LPCTSTR key ) const; |
CMapWordToOb |
UINT HashKey( WORD key ) const; |
CMapWordToPtr |
UINT HashKey( WORD key ) const; |
CMapStringToOb::InitHashTable
ハッシュ テーブルを初期化します。
void InitHashTable(
UINT hashSize,
BOOL bAllocNow = TRUE);
パラメーター
hashSize
ハッシュ テーブル内のエントリの数。
bAllocNow
TRUE
場合は、初期化時にハッシュ テーブルを割り当てます。それ以外の場合は、必要に応じてテーブルが割り当てられます。
解説
パフォーマンスを最大限に高めるには、ハッシュ テーブルのサイズを素数にする必要があります。 競合を最小限に抑えるには、予想される最大データ セットのサイズを約 20% 大きくする必要があります。
次の表に、 CMapStringToOb::InitHashTable
のような他のメンバー関数を示します。
クラス | メンバー関数 |
---|---|
CMapPtrToPtr |
void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE ); |
CMapPtrToWord |
void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE ); |
CMapStringToString |
void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE ); |
CMapStringToPtr |
void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE ); |
CMapWordToOb |
void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE ); |
CMapWordToPtr |
void InitHashTable( UINT hashSize , BOOL bAllocNow = TRUE ); |
CMapStringToOb::IsEmpty
マップが空かどうかを判断します。
BOOL IsEmpty() const;
戻り値
このマップに要素が含まれている場合は 0 以外。それ以外の場合は 0。
例
RemoveAll
の例を参照してください。
解説
次の表に、 CMapStringToOb:: IsEmpty
のような他のメンバー関数を示します。
クラス | メンバー関数 |
---|---|
CMapPtrToPtr |
BOOL IsEmpty() const; |
CMapPtrToWord |
BOOL IsEmpty() const; |
CMapStringToPtr |
BOOL IsEmpty() const; |
CMapStringToString |
BOOL IsEmpty() const; |
CMapWordToOb |
BOOL IsEmpty() const; |
CMapWordToPtr |
BOOL IsEmpty() const; |
CMapStringToOb::Lookup
CString
値に基づいてCObject
ポインターを返します。
BOOL Lookup(
LPCTSTR key,
CObject*& rValue) const;
パラメーター
key
検索する要素を識別する文字列キーを指定します。
rValue
検索対象要素から返される値を指定します。
戻り値
要素が見つかった場合は 0 以外。それ以外の場合は 0。
解説
Lookup
では、ハッシュ アルゴリズムを使用して、正確に一致するキー ( CString
値) を持つマップ要素をすばやく検索します。
次の表に、 CMapStringToOb::LookUp
のような他のメンバー関数を示します。
クラス | メンバー関数 |
---|---|
CMapPtrToPtr |
BOOL Lookup( void *key , void*& rValue ) const; |
CMapPtrToWord |
BOOL Lookup( void *key , WORD& rValue ) const; |
CMapStringToPtr |
BOOL Lookup( LPCTSTR key , void*& rValue ) const; |
CMapStringToString |
BOOL Lookup( LPCTSTR key , CString& rValue ) const; |
CMapWordToOb |
BOOL Lookup( WORD key , CObject*& rValue ) const; |
CMapWordToPtr |
BOOL Lookup( WORD key , void*& rValue ) const; |
例
すべてのコレクション例で使用されるCAge
クラスの一覧については、CObList::CObList
を参照してください。
CMapStringToOb map;
CAge *pa;
map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Lisa"), new CAge(11));
map.SetAt(_T("Homer"), new CAge(36));
map.SetAt(_T("Marge"), new CAge(35));
ASSERT(map.Lookup(_T("Lisa"), (CObject *&)pa)); // Is "Lisa" in the map?
ASSERT(*pa == CAge(11)); // Is she 11?
CMapStringToOb::LookupKey
指定したキー値に関連付けられているキーへの参照を返します。
BOOL LookupKey(
LPCTSTR key,
LPCTSTR& rKey) const;
パラメーター
key
検索する要素を識別する文字列キーを指定します。
rKey
関連付けられているキーへの参照。
戻り値
キーが見つかった場合は 0 以外。それ以外の場合は 0。
解説
関連付けられた要素がマップから削除された後、またはマップが破棄された後に使用した場合、キーへの参照を使用しても安全ではありません。
次の表に、 CMapStringToOb:: LookupKey
のような他のメンバー関数を示します。
クラス | メンバー関数 |
---|---|
CMapStringToPtr |
BOOL LookupKey( LPCTSTR key , LPCTSTR& rKey ) const; |
CMapStringToString |
BOOL LookupKey( LPCTSTR key , LPCTSTR& rKey ) const; |
CMapStringToOb::operator [ ]
SetAt
メンバー関数の代わりに便利です。
CObject*& operator[ ](lpctstr key);
戻り値
CObject
オブジェクトへのポインターへの参照。マップが空であるか、key
が範囲外の場合にNULL
。
解説
したがって、代入ステートメント ( l-value
) の左側でのみ使用できます。 指定したキーを持つ map 要素がない場合は、新しい要素が作成されます。
マップにキーが見つからない可能性があるため、この演算子と同等の "右側" (r-value
) はありません。 要素の取得には、 Lookup
メンバー関数を使用します。
次の表に、 CMapStringToOb::operator []
のような他のメンバー関数を示します。
クラス | メンバー関数 |
---|---|
CMapPtrToPtr | void*& operator[](void *key ); |
CMapPtrToWord | WORD& operator[](void *key ); |
CMapStringToPtr | void*& operator[](lpctstr key ); |
CMapStringToString | CString& operator[](lpctstr key ); |
CMapWordToOb | CObject*& operator[](word key ); |
CMapWordToPtr | void*& operator[](word key ); |
例
すべてのコレクション例で使用されるCAge
クラスの一覧については、CObList::CObList
を参照してください。
CMapStringToOb map;
map[_T("Bart")] = new CAge(13);
map[_T("Lisa")] = new CAge(11);
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("Operator [] example: ") << &map << _T("\n");
#endif
このプログラムの結果は次のとおりです。
Operator [] example: A CMapStringToOb with 2 elements
[Lisa] = a CAge at $4A02 11
[Bart] = a CAge at $497E 13
CMapStringToOb::RemoveAll
このマップからすべての要素を削除し、 CString
キー オブジェクトを破棄します。
void RemoveAll();
解説
各キーによって参照される CObject
オブジェクトは破棄されません。 参照されているCObject
オブジェクトが確実に破棄されない場合、RemoveAll
関数によってメモリ リークが発生する可能性があります。
マップが既に空の場合、関数は正しく機能します。
次の表に、 CMapStringToOb::RemoveAll
のような他のメンバー関数を示します。
クラス | メンバー関数 |
---|---|
CMapPtrToPtr |
void RemoveAll(); |
CMapPtrToWord |
void RemoveAll(); |
CMapStringToPtr |
void RemoveAll(); |
CMapStringToString |
void RemoveAll(); |
CMapWordToOb |
void RemoveAll(); |
CMapWordToPtr |
void RemoveAll(); |
例
すべてのコレクション例で使用されるCAge
クラスの一覧については、CObList::CObList
を参照してください。
{
CMapStringToOb map;
CAge age1(13); // Two objects on the stack
CAge age2(36);
map.SetAt(_T("Bart"), &age1);
map.SetAt(_T("Homer"), &age2);
ASSERT(map.GetCount() == 2);
map.RemoveAll(); // CObject pointers removed; objects not removed.
ASSERT(map.GetCount() == 0);
ASSERT(map.IsEmpty());
} // The two CAge objects are deleted when they go out of scope.
CMapStringToOb::RemoveKey
指定されたキーに対応するマップ エントリを検索します。キーが見つかった場合は、エントリを削除します。
BOOL RemoveKey(LPCTSTR key);
パラメーター
key
マップ参照に使用する文字列を指定します。
戻り値
エントリが見つかり、正常に削除された場合は 0 以外。それ以外の場合は 0。
解説
これにより、 CObject
オブジェクトが他の場所で削除されていない場合、メモリ リークが発生する可能性があります。
次の表に、 CMapStringToOb::RemoveKey
のような他のメンバー関数を示します。
クラス | メンバー関数 |
---|---|
CMapPtrToPtr |
BOOL RemoveKey( void *key ); |
CMapPtrToWord |
BOOL RemoveKey( void *key ); |
CMapStringToPtr |
BOOL RemoveKey( LPCTSTR key ); |
CMapStringToString |
BOOL RemoveKey( LPCTSTR key ); |
CMapWordToOb |
BOOL RemoveKey( WORD key ); |
CMapWordToPtr |
BOOL RemoveKey( WORD key ); |
例
すべてのコレクション例で使用されるCAge
クラスの一覧については、CObList::CObList
を参照してください。
CMapStringToOb map;
map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Lisa"), new CAge(11));
map.SetAt(_T("Homer"), new CAge(36));
map.SetAt(_T("Marge"), new CAge(35));
map.RemoveKey(_T("Lisa")); // Memory leak: CAge object not
// deleted.
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("RemoveKey example: ") << &map << _T("\n");
#endif
このプログラムの結果は次のとおりです。
RemoveKey example: A CMapStringToOb with 3 elements
[Marge] = a CAge at $49A0 35
[Homer] = a CAge at $495E 36
[Bart] = a CAge at $4634 13
CMapStringToOb::SetAt
主な手段は、マップに要素を挿入することを意味します。
void SetAt(
LPCTSTR key,
CObject* newValue);
パラメーター
key
新しい要素のキーである文字列を指定します。
newValue
新しい要素の値である CObject
ポインターを指定します。
解説
まず、キーが検索されます。 キーが見つかった場合は、対応する値が変更されます。それ以外の場合は、新しいキーと値の要素が作成されます。
次の表に、 CMapStringToOb::SetAt
のような他のメンバー関数を示します。
クラス | メンバー関数 |
---|---|
CMapPtrToPtr |
void SetAt( void *key , void *newValue ); |
CMapPtrToWord |
void SetAt( void *key , WORD newValue ); |
CMapStringToPtr |
void SetAt( LPCTSTR key , void *newValue ); |
CMapStringToString |
void SetAt( LPCTSTR key , LPCTSTR newValue ); |
CMapWordToOb |
void SetAt( WORD key , CObject *newValue ); |
CMapWordToPtr |
void SetAt( WORD key , void *newValue ); |
例
すべてのコレクション例で使用されるCAge
クラスの一覧については、CObList::CObList
を参照してください。
CMapStringToOb map;
CAge *pa;
map.SetAt(_T("Bart"), new CAge(13));
map.SetAt(_T("Lisa"), new CAge(11)); // Map contains 2
// elements.
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("before Lisa's birthday: ") << &map << _T("\n");
#endif
if (map.Lookup(_T("Lisa"), (CObject *&)pa))
{ // CAge 12 pointer replaces CAge 11 pointer.
map.SetAt(_T("Lisa"), new CAge(12));
delete pa; // Must delete CAge 11 to avoid memory leak.
}
#ifdef _DEBUG
afxDump << _T("after Lisa's birthday: ") << &map << _T("\n");
#endif
このプログラムの結果は次のとおりです。
before Lisa's birthday: A CMapStringToOb with 2 elements
[Lisa] = a CAge at $493C 11
[Bart] = a CAge at $4654 13
after Lisa's birthday: A CMapStringToOb with 2 elements
[Lisa] = a CAge at $49C0 12
[Bart] = a CAge at $4654 13
関連項目
CObject
クラス
階層図
CMapPtrToPtr
クラス
CMapPtrToWord
クラス
CMapStringToPtr
クラス
CMapStringToString
クラス
CMapWordToOb
クラス
CMapWordToPtr
クラス