Share via


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 の変数は、すべてのマップ バリエーションで代替エントリ アクセスに使用されます。 a POSITION を使用してエントリを "記憶" し、マップを反復処理できます。 この反復はキー値によって順番に行われると思われるかもしれません。そうじゃないです。 取得された要素のシーケンスは不確定です。

CMapStringToOb には、IMPLEMENT_SERIAL マクロが組み込まれており、その要素のシリアル化とダンプがサポートされます。 マップがアーカイブに格納されている場合、オーバーロードされた挿入 ( <<) 演算子またはメンバー関数を使用して、各要素が順番に Serialize シリアル化されます。

マップ内の個々の要素 ( CString 値と CObject 内容) の診断ダンプが必要な場合は、ダンプ コンテキストの深さを 1 以上に設定する必要があります。

オブジェクトが CMapStringToOb 削除されたとき、またはその要素が削除されると、 CString オブジェクトと CObject ポインターが削除されます。 ポインターによって CObject 参照されるオブジェクトは破棄されません。

マップ クラスの派生は、リストの派生に似ています。 特殊な目的のリスト クラスの派生の図については、コレクションに関する記事を参照してください。

継承階層

CObject

CMapStringToOb

必要条件

ヘッダー:afxcoll.h

CMapStringToOb::CMapStringToOb

CStringの -to- CObject* map を構築します。

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

map 要素 rNextPositionを取得し、更新 rNextPosition してマップ内の次の要素を参照します。

void GetNextAssoc(
    POSITION& rNextPosition,
    CString& rKey,
    CObject*& rValue) const;

パラメーター

rNextPosition
GetNextAssoc または GetStartPosition 呼び出しによって返される POSITION 値への参照を指定します。

rKey
取得した要素の返されるキー (文字列) を指定します。

rValue
取得した要素 (ポインター) の戻り値を CObject 指定します。 このパラメーターの詳細については、「解説」を参照してください。

解説

この関数は、マップ内のすべての要素を反復処理する場合に最も便利です。 位置シーケンスは必ずしもキー値シーケンスと同じではないことに注意してください。

取得した要素がマップの最後の要素である場合、新しい値 rNextPositionNULL.

パラメーターの 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

呼び出しに渡すことができる値を POSITION 返すことによって、マップの反復処理を GetNextAssoc 開始します。

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

値に CObject 基づいてポインターを CString 返します。

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 参照。または NULL マップが空であるか、範囲外 key の場合。

解説

したがって、代入ステートメント (an 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 破棄されません。 参照先CObjectRemoveAllオブジェクトが確実に破棄されないようにしないと、関数によってメモリ リークが発生する可能性があります。

マップが既に空の場合、関数は正しく機能します。

次の表に、次のような他のメンバー関数を 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 クラス