-
언리얼 컨테이너 라이브러리 I - Set게임 개발/Unreal 2024. 2. 1. 00:43
TSet의 특징
STL의 set과 언리얼 TSet의 비교- STL set의 특징
- STL set은 이진 트리로 구성되어 있어 정렬을 지원함
- STL set은 메모리 구성이 효울적이지 않음
- STL set은 요소가 삭제될 때 균형을 위한 재구축이 일어날 수 있음
- STL set의 모든 자료를 순회하는데 적합하지 않음
언리얼 TSet의 특징
- TSet은 해시테이블 형태로 키 데이터가 구축되어 있어 빠른 검색이 가능함.
- TSet은 동적 배열의 형태로 데이터가 모여있음
- TSet의 데이터는 빠르게 순회할 수 있음
- TSet의 데이터는 삭제해도 재구축이 일어나지 않음
- TSet의 자료에는 비어있는 데이터가 있을 수 있음
따라서 STL set과 언리얼 TSet의 활용 방법은 서로 다르기 때문에 주의할 것
STL의 unordered_set과 유사하게 동작하지만 동일하진 않음
TSet의 중복 없는 데이터 집합을 구축하는데 유용하게 사용할 수 있음
TSet 언리얼 공식 문서
TSet은 데이터값 자체를 키로 사용하며, 이 때 엘리먼트 값을 평가하는 오버라이드 가능 함수를 사용한다.
TSet는 엘리멘트 추가, 검색, 제거가 매우 빠르다.기본적으로 TSet는 중복 키를 지원하지 않지만, 템플릿 파라미터로 사용할 수는 있다.
다른 컨테이너 클래스와 마찬가지로, 데이터 저장을 위한 커스텀 메모리 얼로케이터를 제공할 수 있다.
TArray와 달리 TSet 엘리먼트 메모리 내 상대 순서는 신뢰성이 있거나 안정적이지 않다.세트의 데이터 구조는 희소 배열(?)세트 생성 및 채우기
TSet<FString> FruitSet;
이렇게 하면 FString 데이터를 저장하는 빈 TSet 가 생성된다. TSet 는 operator== 로 엘리먼트를 직접 비교하고, GetTypeHash 로 해싱하며, 표준 힙 얼로케이터를 사용한다. 이 시점에서 할당되는 메모리는 없다.
세트를 채우는 표준 방식은, Add 함수에 키 (엘리먼트) 를 붙여 사용하는 것이다:
FruitSet.Add(TEXT("Banana")); FruitSet.Add(TEXT("Grapefruit")); FruitSet.Add(TEXT("Pineapple")); // FruitSet == [ "Banana", "Grapefruit", "Pineapple" ]
예시에서는 삽입 순서대로 나열되어 있지만, 실제로 이 순서가 유지된다는 보장은 없다.
DefaultKeyFuncs
한 유형에 operator== 와 멤버가 아닌 GetTypeHash 오버로드가 있는 한, 그 유형은 TSet 가 사용할 수 있는데, 그 유형이 엘리먼트이기도 하고 키이기도 하기 때문이다. 하지만 그러한 함수를 오버로드하는 것이 바람직하지 않은 경우 유형을 키로 사용하는 것이 좋을 수 있다.
#이득우의 언리얼 프로그래밍1
'게임 개발 > Unreal' 카테고리의 다른 글
언리얼 컨테이너 라이브러리 I - Array (0) 2024.01.31 언리얼 C++ 설계 III - 델리게이트 (1) 2024.01.30 컴포지션(Composition) (0) 2024.01.30 언리얼 C++ 설계 I - 인터페이스 (0) 2024.01.29 언리얼 오브젝트 리플렉션 시스템 I (1) 2024.01.27