WN_인생기록

[UE_5] TSet 본문

코드 리뷰

[UE_5] TSet

WhNi 2024. 5. 31. 14:41

https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/TSet/

 

TSet

TSet, 세트는 보통 순서가 중요치 않은 상황에서 고유 엘리먼트를 저장하는 데 사용되는 고속 컨테이너 클래스입니다.

docs.unrealengine.com

 

Set은 중복없는 데이터를 담을 때 주로 많이 쓰이는데

 

Unreal 에서는 해시 테이블 형태로 키, 데이터로 구축되어 있고

(Dynamic Array 에서 배열이 중간중간 비어있다고(해시 테이블이라서) 생각하면 됨)

 

C++ STL set은 이진 트리로 구성되어 있음.

 

구조가 다름. 

 

TSet은 독립된 키로 데이터값을 연결하는게 아니라 데이터 값 자체를 키로 사용함. 

 

대부분 TArray와 유사하지만, 구조 자체가 해시테이블로 구성되어 있어서 탐색에 있어서는 무척 빠름. 데이터가 클때는 TSet을 사용하는게 좋다. 

 

해시테이블로 찾은 데이터는 FSetElementId 라는 구조체로  저장되어 있음. 

FSetElementId BananaIndex = FruitSet.Index(TEXT("Banana"));
// BananaIndex is a value between 0 and (FruitSet.Num() - 1)
FPlatformMisc::LocalPrint(
    *FString::Printf(
        TEXT(" \"%s\"\n"),
        *FruitSet[BananaIndex]
    )
);
// Prints "Banana"

FSetElementId LemonIndex = FruitSet.Index(TEXT("Lemon"));
// LemonIndex is INDEX_NONE (-1)
FPlatformMisc::LocalPrint(
    *FString::Printf(
        TEXT(" \"%s\"\n"),
        *FruitSet[LemonIndex]
    )
); // Assert!

 

내부적으로 Remove를 할때는 중간중간 비어있는 공간이 <Invalid>라는 값으로 남아있음.

 

그래서 이후에 Add를 통해 데이터를 추가할때는 가장 마지막의 <Invalid> 값에 데이터를 삽입하게 됨. (내부적인 구조)

 

 

'코드 리뷰' 카테고리의 다른 글

[UE_5] TArray  (0) 2024.05.31
A* Algorithm -2  (0) 2024.03.28
A* Algorithm -1  (0) 2024.03.25