상세 컨텐츠

본문 제목

🪣 UNREAL Containers - TSet

Study/UNREAL

by J2on 2024. 2. 9. 03:09

본문

TSet은 TMap과 유사한데, 다른 점은 TSet은 Data 값 자체를 key로써 사용한다는 것이다.

 

TSet은 Hashing을 사용하여 굉장히 빠른 add, find , remove를 제공한다.

 

기본적으로 정렬이 되어있지 않고, Unique한 Element를 저장하는 container다.

 

기본적으로 Hashing 기능이 구현되어 있지만,

DefaultKeyFuncs를 기반으로 새로운 Hashing을 구성할 수 있다 (는 것 같은데)

 

이를 바탕으로 동일한 value를 여러 Key로 구성할 수도 있다

(하지만 Key값은 Unique 해야 한다.)

 

TSet 역시 다른 자료구조처럼 어떤 Allocator를 사용할지 정할 수 있다.

 

 

재밌는 점.

TArray와는 다르게 항상 같은 순서를 가지는 것이 아니다.

 

자동으로 정렬되어 있지 않다고 해도

  • 순서가 있는 것
  • 순서가 없는 것

이렇게 나눌 수 있는데, Set은 순서가 없다.

이건 C++도 마찬가지

 

그래서 Iteration으로 출력하면, 매번 순서가 달라질 수 있다.

 

그리고 당연하게도, TArray처럼 연속된 메모리 공간에 배치되지 않는다.

 

그렇다면 index를 통한 random access가 불가능하겠지.

 

TSet<FString> FruitSet;

FruitSet.Add(TEXT("Banana"));
FruitSet.Add(TEXT("Grapefruit"));
FruitSet.Add(TEXT("Pineapple"));
// FruitSet == [ "Banana", "Grapefruit", "Pineapple" ]

TSet<FString> FruitSet2;
FruitSet2.Emplace(TEXT("Kiwi"));
FruitSet2.Emplace(TEXT("Melon"));
FruitSet2.Emplace(TEXT("Mango"));
FruitSet2.Emplace(TEXT("Orange"));
FruitSet.Append(FruitSet2);
// FruitSet == [ "Banana", "Grapefruit", "Pineapple", "Pear", "Orange", "Kiwi", "Melon", "Mango" ]

 

 

 

 

TSet

TSets are a fast container class to store (usually) unique elements in a context where the order is irrelevant.

docs.unrealengine.com

 

 

관련글 더보기

댓글 영역