コレクション
Microsoft Foundation Class ライブラリには、オブジェクトのグループを管理するためのコレクション クラスが用意されています。 これらのクラスには、次の 2 種類があります:
Note
コードに既に非テンプレート コレクション クラスが使用されている場合は、引き続き使用できます。 独自のデータ型に対して新しいタイプセーフなコレクション クラスを作成する場合は、新しいテンプレート ベースのクラスを使用することをお勧めします。
コレクション図形
コレクション クラスの特性は、"shape" とその要素の型によって特徴付けられます。 図形は、オブジェクトがコレクションによってどのように編成および格納されるかを示します。 MFC には、リスト、配列、およびマップ (ディクショナリとも呼ばれます) という 3 つの基本的なコレクション図形が用意されています。 特定のプログラミングの問題に最も適したコレクション図形を選択できます。
指定された 3 つのコレクションの各図形については、このトピックの後半で簡単に説明します。 図形の機能を比較して、プログラムに最適なものを判断するには、「コレクション クラスの選択に関する推奨事項」を参照してください。
リスト
リスト クラスは、二重リンク リストとして実装されている要素の順序付けられたインデックスなしのリストを提供します。 リストには "head" と "tail" があり、ヘッドまたはテールの要素を追加または削除したり、中央に要素を挿入または削除したりすると非常に高速になります。
Array
配列クラスは、動的にサイズが設定され、順序付けられた、整数で始まるオブジェクトの配列を提供します。
マップ (辞書とも呼ばれます)
マップとは、キー オブジェクトを値オブジェクトに関連付けるコレクションです。
テンプレート ベースのコレクション クラス
任意の型のオブジェクトを含むタイプセーフなコレクションを実装する最も簡単な方法は、MFC テンプレートベースのクラスの 1 つを使用することです。 これらのクラスの例については、MFC のサンプルの 「COLLECT」を参照してください。
次の表は、MFC テンプレート ベースのコレクション クラスを示しています。
コレクション テンプレート クラス
コレクションのコンテンツ | 配列 | リスト | Maps |
---|---|---|---|
任意の型のオブジェクトのコレクション | CArray |
CList |
CMap |
任意の型のオブジェクトへのポインターのコレクション | CTypedPtrArray |
CTypedPtrList |
CTypedPtrMap |
テンプレートに基づいていないコレクション クラス
アプリケーションが既に MFC の非テンプレート クラスを使用している場合は、引き続き使用できます。 ただし、新しいコレクションの場合は、テンプレートベースのクラスを使用することをお勧めします。 次の表は、テンプレートに基づいていない MFC コレクション クラスの一覧です。
非テンプレート コレクション クラス
配列 | リスト | Maps |
---|---|---|
CObArray |
CObList |
CMapPtrToWord |
CByteArray |
CPtrList |
CMapPtrToPtr |
CDWordArray |
CStringList |
CMapStringToOb |
CPtrArray |
CMapStringToPtr |
|
CStringArray |
CMapStringToString |
|
CWordArray |
CMapWordToOb |
|
CUIntArray |
CMapWordToPtr |
「コレクション クラスの選択に関する推奨事項」の「MFC コレクションクラスの特徴」表では、これらの特徴 (形状以外) に関して MFC コレクションクラスについて説明しています:
クラスで C++ テンプレートを使用しているかどうか
コレクションに格納されている要素をシリアル化できるかどうか
コレクションに格納されている要素を診断用にダンプできるかどうか
タイプ セーフなコレクションかどうか