CMap クラス

 

Visual Studio 2017 RC の最新のドキュメントの詳細については、Visual Studio 2017 RC ドキュメントをご参照ください。

一意なキーを値に割り当てる辞書コレクション クラスです。

template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>class CMap : public CObject  

パラメーター

KEY
マップのキーとして使用されるオブジェクトのクラスです。

ARG _ KEY
データ型KEY引数; 通常への参照をKEYします。

VALUE
マップに格納されているオブジェクトのクラスです。

ARG _ VALUE
データ型VALUE引数; 通常への参照をVALUEします。

パブリック構造体

名前説明
CMap::CPairキーの値と関連付けられたオブジェクトの値を含む入れ子になった構造体。

パブリック コンストラクター

名前説明
CMap::CMapキーの値を割り当てるコレクションを構築します。

パブリック メソッド

名前説明
CMap::GetCountこのマップ内の要素の数を返します。
CMap::GetHashTableSizeハッシュ テーブル内の要素の数を返します。
CMap::GetNextAssoc反復処理するためには、次の要素を取得します。
CMap::GetSizeこのマップ内の要素の数を返します。
CMap::GetStartPosition最初の要素の位置を返します。
CMap::InitHashTableハッシュ テーブルを初期化し、そのサイズを指定します。
CMap::IsEmptyマップが空の状態 (要素がない) をテストします。
CMap::Lookup指定されたキーにマップされている値を検索します。
CMap::PGetFirstAssoc最初の要素へのポインターを返します。
CMap::PGetNextAssoc反復処理するための次の要素へのポインターを取得します。
値が指定の値に一致するキーへのポインターを返します。
CMap::RemoveAllこのマップからすべての要素を削除します。
CMap::RemoveKeyキーによって指定される要素を削除します。
CMap::SetAtマップに要素を挿入します。一致するキーが見つかった場合は、既存の要素を置換します。

パブリック演算子

名前説明
CMap::operatorマップ â € に要素を挿入"をSetAtします。

マップにキー/値ペア (要素) を挿入すると効率的に取得かへのアクセス キーを使用してペアを削除することができます。 マップ内のすべての要素を繰り返すこともできます。

型の変数位置エントリに代替のアクセスに使用します。 使用することができます、位置「ください」などのエントリと、マップを反復処理します。 このイテレーションがキーの値がシーケンシャルであると思われるかもしれませんそうじゃないです。 取得する要素の順序は予測できません。

ほとんどの用途のグローバル ヘルパー関数をこのクラスの呼び出しの一部のメンバー関数をカスタマイズする必要があります、CMapクラスです。 参照してくださいコレクション クラスのヘルパーのマクロとグローバルのセクションで、MFC``Referenceです。

CMap上書き指定シリアル化とその要素のダンプがサポートされます。 マップを使用して、アーカイブに格納されている場合Serialize、各マップ要素が順にシリアル化します。 既定の実装、SerializeElementsヘルパー関数ではビットごとの書き込みです。 派生したポインター コレクション項目のシリアル化に関する情報のCObjectまたはその他のユーザー定義型を参照してください方法: タイプ セーフなコレクションを作成するです。

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

ときに、CMapオブジェクトが削除されると、またはその要素が削除された場合、キーと値の両方が削除されます。

マップ クラスの派生は、リストの派生に似ています。 記事を参照してコレクション図解専用のリストのクラスから派生します。

CObject

CMap

ヘッダー: afxtempl.h

空のマップを構築します。

CMap(INT_PTR nBlockSize = 10);

パラメーター

nBlockSize
マップを拡張するためのメモリ割り当ての粒度を指定します。

コメント

単位でメモリが割り当てられた、マップするにつれて、nBlockSizeエントリです。

         // declares a map of ints to points
         CMap<int,int,CPoint,CPoint> myMap(16);      

キーの値と関連付けられているオブジェクトの値が含まれています。

コメント

次に、クラス内で入れ子になった構造メンバーします。

構造体は、2 つのフィールドで構成されます。

  • --keyÂキーの種類の実際の値。

  • --valueÂ関連するオブジェクトの値。

戻り値の格納に使用される、CMap::PGetFirstAssoc、およびCMap::PGetNextAssocします。

使用状況の例は、の使用例を参照してください。します。

マップ内の要素の数を取得します。

INT_PTR GetCount() const;  

戻り値

要素の数。

例を参照してくださいCMap::Lookupします。

マップのハッシュ テーブル内の要素の数が決まります。

UINT GetHashTableSize() const;  

戻り値

ハッシュ テーブル内の要素の数。

         CMap<int,int,CPoint,CPoint> myMap;

         UINT uTableSize = myMap.GetHashTableSize();      

位置にあるマップ要素を取得rNextPosition、し、更新rNextPositionに、マップ内の次の要素を参照してください。

void GetNextAssoc(
    POSITION& rNextPosition,
    KEY& rKey,
    VALUE& rValue) const;  

パラメーター

rNextPosition
参照を指定、位置以前から返される値GetNextAssocまたはGetStartPosition呼び出します。

キー
マップのキーの種類を指定するテンプレート パラメーター。

rKey
取得した要素の返されたキーを指定します。


マップの値の型を指定するテンプレート パラメーター。

rValue
取得した要素の戻り値を指定します。

コメント

この関数は、マップ内のすべての要素を反復処理する方が適しています。 位置シーケンスがないとは限りませんと同じキー値のシーケンスに注意してください。

取得した要素が、マップ内の最後の新しい値のrNextPositionに設定されているNULLします。

例を参照してくださいCMap::SetAtします。

マップ要素の数を返します。

INT_PTR GetSize() const;  

戻り値

マップ内のアイテムの数。

コメント

マップ内の要素の数を取得するには、このメソッドを呼び出します。

         CMap<int,int,CPoint,CPoint> myMap;

         myMap.InitHashTable(257);

         // Add 200 elements to the map.
         for (int i = 0; i < 200; i++)
            myMap[i] = CPoint(i, i);

         // Remove the elements with even key values.
         CPoint pt;
         for (int i = 0; myMap.Lookup(i, pt); i += 2)
         {
            myMap.RemoveKey(i);
         }

         ASSERT(myMap.GetSize() == 100);
         TRACE(_T("myMap with %d elements:\n"), myMap.GetCount());
		   POSITION pos = myMap.GetStartPosition();
         int iKey;
         CPoint ptVal;
		   while (pos != NULL)
		   {
			   myMap.GetNextAssoc(pos, iKey, ptVal);
			   TRACE(_T("\t[%d] = (%d,%d)\n"), iKey, ptVal.x, ptVal.y);
         }

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

POSITION GetStartPosition() const;  

戻り値

A位置マップを反復処理するための開始位置を表す値またはNULLマップが空の場合。

コメント

繰り返しシーケンスは予想外のです。したがって、マップの最初の要素""には、特別な意味はありません。

例を参照してくださいCMap::SetAtします。

ハッシュ テーブルを初期化します。

void InitHashTable(UINT hashSize, BOOL  bAllocNow = TRUEÂ);  

パラメーター

hashSize
ハッシュ テーブル内のエントリの数です。

bAllocNow
場合TRUE初期化時にハッシュ テーブルを割り当てるために必要なときにそれ以外の場合、テーブルが割り当てられます。

コメント

最適なパフォーマンスをハッシュ テーブルのサイズは、素数をする必要があります。 競合を最小限に抑えるため、サイズする必要があります約 20% が予想される最大のデータ セットよりも大きいです。

例を参照してくださいCMap::Lookupします。

マップが空かどうかを決定します。

BOOL IsEmpty() const;  

戻り値

このマップに要素が含まれていない場合は 0 以外。それ以外の場合 0 を返します。

例を参照してくださいCMap::RemoveAllします。

指定されたキーにマップされている値を検索します。

BOOL Lookup(ARG_KEY key, VALUE& rValue) const;  

パラメーター

ARG_KEY
テンプレート パラメーターの型を指定する、key値。

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


検索する値の型を指定します。

rValue
検索された値を受け取ります。

戻り値

要素が見つかった場合は 0 以外。それ以外の場合 0 を返します。

コメント

Lookupハッシュ アルゴリズムを使用して、指定したキーを完全に一致するキーを使用してマップの要素をすばやく検索します。

         CMap<int,int,CPoint,CPoint> myMap;

         myMap.InitHashTable(257);

         // Add 200 elements to the map.
         for (int i = 0; i < 200; i++)
            myMap[i] = CPoint(i, i);

         // Remove the elements with even key values.
         CPoint pt;
         for (int i = 0; myMap.Lookup(i, pt); i += 2)
         {
            myMap.RemoveKey(i);
         }

         ASSERT(myMap.GetSize() == 100);
         TRACE(_T("myMap with %d elements:\n"), myMap.GetCount());
		   POSITION pos = myMap.GetStartPosition();
         int iKey;
         CPoint ptVal;
		   while (pos != NULL)
		   {
			   myMap.GetNextAssoc(pos, iKey, ptVal);
			   TRACE(_T("\t[%d] = (%d,%d)\n"), iKey, ptVal.x, ptVal.y);
         }

便利な代用、SetAtメンバー関数。

VALUE& operator[](ARG_KEY key);

パラメーター


マップ値の型を指定するテンプレート パラメーター。

ARG_KEY
キーの値の型を指定するテンプレート パラメーター。

key
マップの値を取得するために使用するキー。

コメント

したがって、代入ステートメント (左辺値) の左側にのみ使用できます。 指定したキーにマップ要素が存在しない、新しい要素が作成されます。

ない「右側」(右辺値) にこの演算子と同じキーがマップに含まれていない可能性があります可能性があるため。 使用して、Lookupメンバー関数要素を取得します。

例を参照してくださいCMap::Lookupします。

マップ オブジェクトの最初のエントリを返します。

const CPair* PGetFirstAssoc() const;Â CPair* PGetFirstAssoc();  

戻り値

マップ内の最初のエントリへのポインター参照してくださいCMap::CPairします。 マップにエントリが含まれていない場合、値はNULLします。

コメント

この関数では、マップ オブジェクト内の最初の要素のポインターを返します。

         typedef CMap<int, int, CPoint, CPoint> CMyMap;
         CMyMap myMap;

         myMap.InitHashTable(257);

         // Add 10 elements to the map.
         for (int i = 0; i <= 10; i++)
            myMap.SetAt(i, CPoint(i, i));

         // Print the element value with even key values.
         int nKey = 0;
         CPoint pt;
         CMyMap::CPair* pCurVal;

         pCurVal = myMap.PGetFirstAssoc();
         while (pCurVal != NULL)
         {
            if ((nKey%2) == 0)
            {
               _tprintf_s(_T("Current key value at %d: %d,%d\n"),
                  pCurVal->key, pCurVal->value.x, pCurVal->value.y);
            }
            pCurVal = myMap.PGetNextAssoc(pCurVal);
            nKey++;
         }

指すに基づいてマップ要素を取得pAssocRecします。

const CPair *PGetNextAssoc(const CPair* pAssocRet) const;  
  
CPair *PGetNextAssoc(const CPair* pAssocRet);

パラメーター

pAssocRet
直前のマップ エントリが指すPGetNextAssocまたはCMap::PGetFirstAssoc呼び出します。

戻り値

マップ内の次のエントリへのポインター参照してくださいCMap::CPairします。 値は、要素がマップ内の最後の場合は、 NULLします。

コメント

マップ内のすべての要素を反復処理するには、このメソッドを呼び出します。 呼び出しの最初の要素を取得PGetFirstAssocを連続する呼び出すと、マップを反復処理し、PGetNextAssocです。

例を参照してくださいCMap::PGetFirstAssocします。

指定されたキーにマップされている値を検索します。

const CPair* PLookup(ARG_KEY  key) const;
CPair* PLookup(Â    ARG_KEY  keyÂ);  ```  
  
### Parameters  
 `key`  
 Key for the element to be searched for.  
  
### Return Value  
 A pointer to a key structure; see [CMap::CPair](#cmap__cpair). If no match is found, `CMap::PLookup` returns `NULL`.  
  
### Remarks  
 Call this method to search for a map element with a key that exactly matches the given key.  
  
### Example  
 [!CODE [NVC_MFCCollections#60](../CodeSnippet/VS_Snippets_Cpp/NVC_MFCCollections#60)]  
  
##  <a name="cmap__removeall"></a>  CMap::RemoveAll  
 Removes all the values from this map by calling the global helper function **DestructElements**.  
  

RemoveAll(); を無効にします。

  
### Remarks  
 The function works correctly if the map is already empty.  
  
### Example  
 [!CODE [NVC_MFCCollections#61](../CodeSnippet/VS_Snippets_Cpp/NVC_MFCCollections#61)]  
  
##  <a name="cmap__removekey"></a>  CMap::RemoveKey  
 Looks up the map entry corresponding to the supplied key; then, if the key is found, removes the entry.  
  

BOOL RemoveKey(ARG_KEY key) です。

  
### Parameters  
 `ARG_KEY`  
 Template parameter specifying the type of the key.  
  
 `key`  
 Key for the element to be removed.  
  
### Return Value  
 Nonzero if the entry was found and successfully removed; otherwise 0.  
  
### Remarks  
 The **DestructElements** helper function is used to remove the entry.  
  
### Example  
 See the example for [CMap::SetAt](#cmap__setat).  
  
##  <a name="cmap__setat"></a>  CMap::SetAt  
 The primary means to insert an element in a map.  
  

SetAt (ARG_KEY キー、ARG_VALUE newValue); を無効にします。

  
### Parameters  
 `ARG_KEY`  
 Template parameter specifying the type of the `key` parameter.  
  
 `key`  
 Specifies the key of the new element.  
  
 `ARG_VALUE`  
 Template parameter specifying the type of the `newValue` parameter.  
  
 `newValue`  
 Specifies the value of the new element.  
  
### Remarks  
 First, the key is looked up. If the key is found, then the corresponding value is changed; otherwise a new key-value pair is created.  
  
### Example  
 [!CODE [NVC_MFCCollections#62](../CodeSnippet/VS_Snippets_Cpp/NVC_MFCCollections#62)]  
  
## See Also  
 [MFC Sample COLLECT](../Topic/Visual%20C++%20Samples.md)   
 [CObject Class](../Topic/CObject%20Class.md)   
 [Hierarchy Chart](../Topic/Hierarchy%20Chart.md)








表示: