コレクション クラスの選択に関する推奨事項

この記事には、特定のアプリケーション ニーズに合わせてコレクション クラスを選択する際に役立つ詳細情報が含まれています。

コレクション クラスを選択する際は、次の項目を含むさまざまな要素を考慮する必要があります。

  • 順序付け、インデックス、パフォーマンスなど、クラス形状の特性。下の表「 コレクションの形状と特徴 」を参照してください。

  • クラスで C++ テンプレートを使用しているかどうか

  • コレクションに格納されている要素をシリアル化できるかどうか

  • コレクションに格納されている要素を診断用にダンプできるかどうか

  • タイプ セーフなコレクションかどうか

次の表「 コレクションの形状と特徴」に、使用できるコレクション形状の特性を示します。

  • 2 列目と 3 列目は、各形状の順序付けとアクセスに関する特性を示しています。 表に使用されている用語 "順序付け" とは、項目を挿入または削除した順によってコレクション内の項目の位置が決まることを意味します。項目がその内容によって並べ替えられることを意味するのではありません。 用語 "インデックス付き" は、通常の配列内の項目と同様に、コレクション内の項目を整数インデックスによって取得できることを意味します。

  • 4 列目と 5 列目は、各形状のパフォーマンスを表しています。 頻繁にコレクションに項目を挿入するアプリケーションでは、項目の挿入速度が特に重要です。他のアプリケーションでは、検索速度の方がより重要になる場合があります。

  • 6 列目は、各形状で項目の重複が許可されるかどうかを表しています。

コレクションの形状と特徴

図形 注文済み インデックス付き 要素の追加 指定した要素の検索 要素の重複
一覧取得 はい いいえ 高速 低速 はい
配列 はい 整数に基づく 低速 低速 はい
マップ いいえ キーに基づく 速い 速い いいえ (キー)、はい (値)

次の表「 MFC コレクション クラスの特性」に、特定の MFC コレクション クラスの他の重要な特性をまとめてあります。選択の際に参考にしてください。 クラスを選択する際は、通常、クラスが C++ テンプレートをベースにしているかどうか、MFC のドキュメント シリアル化 機構で要素をシリアル化できるかどうか、MFC の診断ダンプ機構で要素をダンプできるかどうか、クラスがタイプ セーフかどうか (つまり、クラスに基づいてコレクションに格納する項目または取得される項目の型が保証されるかどうか) を考慮します。

MFC コレクション クラスの特性

クラス C++

テンプレートの使用
シリアル化

できるか
シリアル化

ダンプ
等しい

タイプ セーフ
CArray はい はい 1 はい 1 いいえ
CByteArray 番号 イエス はい はい 3
CDWordArray いいえ イエス はい はい 3
CList はい はい 1 はい 1 いいえ
CMap はい はい 1 はい 1 いいえ
CMapPtrToPtr 番号 番号 イエス 番号
CMapPtrToWord 番号 番号 イエス 番号
CMapStringToOb 番号 イエス 有効 番号
CMapStringToPtr 番号 番号 イエス 番号
CMapStringToString 番号 イエス はい はい 3
CMapWordToOb いいえ イエス 有効 番号
CMapWordToPtr 番号 番号 イエス 番号
CObArray 番号 イエス 有効 番号
CObList 番号 イエス 有効 番号
CPtrArray 番号 番号 イエス 番号
CPtrList 番号 番号 イエス 番号
CStringArray 番号 イエス はい はい 3
CStringList いいえ イエス はい はい 3
CTypedPtrArray はい 状況に依存 2 はい イエス
CTypedPtrList はい 状況に依存 2 はい イエス
CTypedPtrMap はい 状況に依存 2 はい 有効
CUIntArray 番号 番号 はい はい 3
CWordArray いいえ イエス はい はい 3
  1. シリアル化を行うには、コレクション オブジェクトの Serialize 関数を明示的に呼び出す必要があります。ダンプを行うには、Dump 関数を明示的に呼び出す必要があります。 フォーム ar << collObj を使用してシリアル化を行うことはできません。また、フォーム dmp<< collObj を使用してダンプを行うこともできません。

  2. シリアル化ができるかどうかは、基になるコレクションの型に依存します。 たとえば、型付きポインター配列が CObArrayに基づいている場合はシリアル化できますが、 CPtrArrayに基づいている場合はシリアル化できません。 通常、"Ptr" が付くクラスはシリアル化できません。

  3. この列が "はい" の非テンプレート コレクション クラスは、そのクラスの用途どおりに使うとタイプ セーフとなります。 たとえば、 CByteArrayにバイト データを格納すると、その配列はタイプ セーフです。 しかし、文字データを格納すると、タイプ セーフは保証されません。

関連項目

コレクション
テンプレート ベースのクラス
方法: タイプ セーフなコレクションを作成する
コレクションの全メンバーへのアクセス