コレクション クラスの選択に関する推奨事項
この記事には、特定のアプリケーション ニーズに合わせてコレクション クラスを選択する際に役立つ詳細情報が含まれています。
コレクション クラスを選択する際は、次の項目を含むさまざまな要素を考慮する必要があります。
順序付け、インデックス、パフォーマンスなど、クラス形状の特性。下の表「 コレクションの形状と特徴 」を参照してください。
クラスで 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 |
シリアル化を行うには、コレクション オブジェクトの
Serialize
関数を明示的に呼び出す必要があります。ダンプを行うには、Dump
関数を明示的に呼び出す必要があります。 フォームar << collObj
を使用してシリアル化を行うことはできません。また、フォームdmp
<< collObj
を使用してダンプを行うこともできません。シリアル化ができるかどうかは、基になるコレクションの型に依存します。 たとえば、型付きポインター配列が
CObArray
に基づいている場合はシリアル化できますが、CPtrArray
に基づいている場合はシリアル化できません。 通常、"Ptr" が付くクラスはシリアル化できません。この列が "はい" の非テンプレート コレクション クラスは、そのクラスの用途どおりに使うとタイプ セーフとなります。 たとえば、
CByteArray
にバイト データを格納すると、その配列はタイプ セーフです。 しかし、文字データを格納すると、タイプ セーフは保証されません。
関連項目
コレクション
テンプレート ベースのクラス
方法: タイプ セーフなコレクションを作成する
コレクションの全メンバーへのアクセス