Recommendations for Choosing a Collection 类
本文包含已模型的详细信息帮助您选择您的特定应用程序所需的集合类。
您的集合类的选择取决于多种因素,包括:
类形状的功能:顺序、索引和性能,如后 集合形态功能 表所示本主题
类是否使用 C++ 模板
是否可序列化集合中存储的元素
集合中存储的元素是否可以为诊断转储。
集合是否为类型安全的
下表, 集合形态功能,概括了可用的集合形状的特性。
列 2 和 3 描述每个形状的排序和访问属性。 在表中, “顺序”结尾意味着项插入和删除的顺序决定它们的集合中的顺序;并不意味着项目在它们的内容排序。 该术语 “标记”意味着集合中的项可以由整数索引检索,这与在典型的数组的项目。
列 4 和 5 描述每个形状的性能。 在需要许多插入到集合的应用程序,插入速度可能尤其重要;对于其他应用程序,查找速度可能更为重要。
第 6 列描述每个形状是否允许重复元素。
集合形态功能
形状 |
排序? |
标记? |
插入元素 |
搜索指定的元素 |
重复元素? |
---|---|---|---|---|---|
列表 |
是 |
否 |
优先。 |
降低 |
是 |
数组 |
是 |
由 int |
降低 |
降低 |
是 |
映射 |
否 |
由键 |
优先。 |
优先。 |
没有 (键) 是 (值) |
下表, MFC 集合类的特性,摘要特定 MFC 集合类的其他重要特征为选择的指南。 您的选择取决于类是否基于 C++ 模板,其元素是否可以通过 MFC 序列化文档 序列化 结构,其元素是否可以通过 MFC 的诊断转储框架为转储,或者该类是类型安全的,即是否可以确保从集合存储和检索元素的类型基于类。
MFC 集合类的特性
类 |
使用 C++ 模板 |
可以是 已序列化 |
可以是 转储 |
Is 类型安全 |
---|---|---|---|---|
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. Serializability 取决于基础集合类型。 例如,因此,如果一个类型化指针数组基于 CObArray,它可序列化;如果基于 CPtrArray,它不可序列化。 通常,无法对 “PTR”类。
3. 如果为标记在此列,是类型安全的提供自己的非集合类使用它将遵循计划。 例如,因此,如果在 CByteArray存储字节,该数组是类型安全的。 ,但是,如果您用于存储字符,其类型安全不太确定。