共用方式為


選擇集合類別的建議

本文所包含的詳細資訊,旨在協助您選擇特定應用程式所需的集合類別。

集合類別的選擇取決於許多因素,包括︰

  • 類別圖形的功能︰排序、編製索引和效能,如本主題稍後的 集合圖形功能 表格所示

  • 類別會使用 C++ 樣板與否

  • 儲存在集合中的項目是否可序列化

  • 儲存在集合中的項目是否可傾印以進行診斷

  • 集合是否為安全類型

以下的 集合圖形功能表格摘要說明可用集合圖形的特性。

  • 欄 2 和 3 描述每個圖形的排序和存取特性。 在下表中,「已排序」一詞是指項目的插入和刪除順序決定其在集合中的順序;而不是指項目依其內容排序。 「已編製索引」一詞是指集合中的項目可由整數索引擷取,就像是一般陣列中的項目。

  • 欄 4 和 5 描述每個圖形的效能。 在需要多次插入集合的應用程式中,插入速度可能特別重要;至於其他應用程式,查閱速度可能比較重要。

  • 欄 6 描述每個圖形是否允許重複的項目。

集合圖形功能

形狀 排序 索引 插入項目 搜尋指定的項目 重複的專案
清單 No 快速 緩慢 Yes
陣列 Yes 依 int 緩慢 緩慢 Yes
地圖 No 依索引鍵 快速 快速 否 (索引鍵) 是 (值)

以下的 MFC 集合類別的特性表格摘要說明特定 MFC 集合類別的其他重要特性,可作為選擇時的指南。 您的選擇可能取決於下列因素:類別是否依據 C++ 範本、其元素是否可透過 MFC 的文件 序列化 機制進行序列化、其元素是否可透過 MFC 的診斷傾印機制進行傾印,或者類別是否為型別安全 (換句話說,您是否可以保證元素的類型儲存在以類別為基礎的集合中,並從中擷取)。

MFC 集合類別的特性

類別 使用 C++

templates
可以是

已序列化
可以是

已傾印
Is

Type-Safe - 類型安全
CArray 是 1 是 1
CByteArray 是 3
CDWordArray No 是 3
CList 是 1 是 1 No
CMap Yes 是 1 是 1
CMapPtrToPtr No
CMapPtrToWord No
CMapStringToOb
CMapStringToPtr No
CMapStringToString 是 3
CMapWordToOb No
CMapWordToPtr No
CObArray
CObList
CPtrArray No
CPtrList No
CStringArray 是 3
CStringList No 是 3
CTypedPtrArray Yes 不一定 2 Yes Yes
CTypedPtrList Yes 不一定 2 Yes Yes
CTypedPtrMap Yes 不一定 2 Yes
CUIntArray Yes 是 3
CWordArray No 是 3
  1. 若要序列化,您必須明確呼叫集合物件的 Serialize 函式;若要傾印,您必須明確呼叫其 Dump 函式。 您不能使用 ar << collObj 格式進行序列化,也不能使用 dmp<< collObj 格式進行傾印。

  2. 能否序列化取決於基礎集合類型。 例如,如果具類型的指標陣列是以 CObArray為基礎,則可以序列化;如果是以 CPtrArray為基礎,則無法序列化。 一般而言,您無法序列化 "Ptr" 類別。

  3. 如果在此欄中標示為 [是],則非範本集合類別為型別安全 (但前提是您必須如預期般使用它)。 例如,如果您將位元組儲存在 CByteArray中,則陣列為型別安全。 但是,如果您用來儲存字元,就不一定是型別安全。

另請參閱

集合
樣板架構類別
如何:建立型別安全集合
存取集合的所有成員