本文包含專為協助您針對特定應用程式需求選擇集合類別而設計的詳細資訊。
您選擇的集合類別取決於許多因素,包括:
類別圖形的功能:順序、索引和效能,如本主題稍後的 集合圖形功能 表格所示
類別是否使用C++範本
儲存在集合中的元素是否可以序列化
是否可以匯出儲存在集合中的元素以進行診斷
集合是否為類型安全
下表「 集合圖形功能」摘要說明可用集合圖形的特性。
數據行 2 和 3 描述每個圖形的排序和存取特性。 在下表中,「已排序」一詞是指項目的插入和刪除順序決定其在集合中的順序;而不是指項目依其內容排序。 「已編製索引」一詞是指集合中的項目可由整數索引擷取,就像是一般陣列中的項目。
數據行 4 和 5 描述每個圖形的效能。 在需要多次插入集合的應用程式中,插入速度可能特別重要;至於其他應用程式,查閱速度可能比較重要。
欄 6 描述每個圖形是否允許重複的項目。
集合圖形功能
形狀 | 已訂購 | 索引 | 插入元素 | 搜尋指定的元素 | 重複的元素 |
---|---|---|---|---|---|
清單 | 是的 | 否 | 快速 | 緩慢 | 是的 |
陣列 | 是的 | by int | 緩慢 | 緩慢 | 是的 |
地圖 | 否 | 依鍵 | 快速 | 快速 | 否 (索引鍵) 是 (值) |
下表的 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
中,則陣列是類型安全的。 但是,如果您使用它來儲存字元,則其類型安全性不太確定。