다음을 통해 공유


컬렉션 클래스 선택에 대한 권장 사항

이 문서에는 특정 애플리케이션 요구 사항에 맞게 컬렉션 클래스를 선택하는 데 도움이 되도록 설계된 자세한 정보가 포함되어 있습니다.

컬렉션 클래스의 선택은 다음을 비롯한 다양한 요인에 따라 달라집니다.

  • 이 항목의 뒷부분에 있는 컬렉션 셰이프 기능 표에 표시된 대로 클래스 셰이프의 기능: 순서, 인덱싱 및 성능

  • 클래스에서 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
  1. 직렬화하려면 컬렉션 개체의 Serialize 함수를 명시적으로 호출해야 합니다. 덤프하려면 해당 함수를 Dump 명시적으로 호출해야 합니다. 폼 ar << collObj 을 사용하여 직렬화하거나 덤프할 폼 dmp<< collObj 을 사용할 수 없습니다.

  2. 직렬화 가능성은 기본 컬렉션 형식에 따라 달라집니다. 예를 들어 형식화된 포인터 배열을 기반으로 CObArray하는 경우 직렬화할 수 있습니다. 기반 CPtrArray이면 직렬화할 수 없습니다. 일반적으로 "Ptr" 클래스는 serialize할 수 없습니다.

  3. 이 열에 '예'로 표시된 경우, 비템플릿 컬렉션 클래스를 의도대로 사용한다면 형식 안전성이 보장됩니다. 예를 들어, CByteArray에 바이트를 저장하면 배열은 타입 세이프입니다. 그러나 문자를 저장하는 데 사용하는 경우 형식 안전성이 떨어집니다.

참고하십시오

컬렉션
Template-Based 클래스
방법: Type-Safe 컬렉션 만들기
컬렉션의 모든 멤버에 액세스