이 문서에는 특정 애플리케이션 요구 사항에 맞게 컬렉션 클래스를 선택하는 데 도움이 되도록 설계된 자세한 정보가 포함되어 있습니다.
컬렉션 클래스의 선택은 다음을 비롯한 다양한 요인에 따라 달라집니다.
이 항목의 뒷부분에 있는 컬렉션 셰이프 기능 표에 표시된 대로 클래스 셰이프의 기능: 순서, 인덱싱 및 성능
클래스에서 C++ 템플릿을 사용하는지 여부
컬렉션에 저장된 요소를 serialize할 수 있는지 여부
진단용으로 컬렉션에 저장된 요소를 덤프할 수 있는지 여부
컬렉션의 형 안전성 여부
다음 표의 컬렉션 셰이프 기능에는 사용 가능한 컬렉션 셰이프의 특징이 요약되어 있습니다.
열 2와 3은 각 셰이프의 순서 및 액세스 특성을 설명합니다. 이 표에서 "정렬 여부"는 항목이 삽입되고 삭제되는 순서가 컬렉션의 순서에 따라 결정되는 것을 의미하며 항목이 내용에 따라 정렬된다는 것을 의미하지는 않습니다. "인덱스 여부"는 컬렉션의 항목을 일반 배열의 항목처럼 정수 인덱스로 검색할 수 있음을 의미합니다.
열 4와 5는 각 셰이프의 성능을 설명합니다. 컬렉션에 항목을 많이 삽입해야 하는 애플리케이션에서는 삽입 속도가 특히 중요합니다. 다른 애플리케이션에서는 조회 속도가 더 중요할 수도 있습니다.
6번 열에서는 각 모양에 요소가 중복될 수 있는지 여부에 대해 설명합니다.
컬렉션 모양 특징
| 모양 | 주문됨 | 인덱싱된 | 요소 삽입 | 지정된 요소 검색 | 중복 요소 |
|---|---|---|---|---|---|
| 목록 | 예 | 아니오 | 빠름 | 느림 | 예 |
| 배열 | 예 | int에 따라 | 느림 | 느림 | 예 |
| 지도 | 아니오 | 키별 | 빠름 | 빠름 | 아니요(키) 예(값) |
다음 표에서 MFC 컬렉션 클래스의 특징은 특정 MFC 컬렉션 클래스의 다른 중요한 특성을 선택 지침으로 요약합니다. 클래스가 C++ 템플릿을 기반으로 하는지 여부, MFC의 문서 serialization 메커니즘을 통해 해당 요소를 직렬화 할 수 있는지 여부, 해당 요소를 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" 클래스는 serialize할 수 없습니다.이 열에 '예'로 표시된 경우, 비템플릿 컬렉션 클래스를 의도대로 사용한다면 형식 안전성이 보장됩니다. 예를 들어,
CByteArray에 바이트를 저장하면 배열은 타입 세이프입니다. 그러나 문자를 저장하는 데 사용하는 경우 형식 안전성이 떨어집니다.
참고하십시오
컬렉션
Template-Based 클래스
방법: Type-Safe 컬렉션 만들기
컬렉션의 모든 멤버에 액세스