상세 컨텐츠

본문 제목

🪣 UNREAL Containers - TMap, TMultiMap

Study/UNREAL

by J2on 2024. 2. 9. 02:31

본문

TArray 다음으로 Unreal에서 많이 쓰는 container

 

TSet하고 비슷한 것이 Hashing key를 이용한 구조를 사용한다는 점

 

사실 Unreal에는 두 가지 Map이 존재한다.

  1. TMap
  2. TMultiMap

TMap

UPROPERTY(EditAnywhere, Category = MapsAndSets)
TMap<int32, FString> FruitMap;

왠지 SKT의 Tmap이 생각나는데

 

특징

  1. Key-Value 형태로, , Unreal에서 제공하는 TPair의 집합으로 이루어져 있다.
  2. key는 unique해야 한다.
  3. TArray처럼 TMap도 같은 타입의 instance만 있어야 한다.
  4. 기본적으론 정렬되어 있지 않다. (그럼 O(1)의 시간복잡도를 가지려나?)

근데 사실 정렬이 가능하다.

KeySort()와 ValueSort()가 가능

FruitMap.KeySort([](int32 A, int32 B) {
    return A > B; // sort keys in reverse
});
// FruitMap == [
//  { Key: 9, Value: "Melon"  },
//  { Key: 5, Value: "Mango"  },
//  { Key: 4, Value: "Kiwi"   },
//  { Key: 3, Value: "Orange" }
// ]

FruitMap.ValueSort([](const FString& A, const FString& B) {
    return A.Len() < B.Len(); // sort strings by length
});
// FruitMap == [
//  { Key: 4, Value: "Kiwi"   },
//  { Key: 5, Value: "Mango"  },
//  { Key: 9, Value: "Melon"  },
//  { Key: 3, Value: "Orange" }
// ]

Value로도 Sort가 가능한 것은 좀 신기하다.

 

TMap 역시 메모리 할당을 위한 Allocator를 선택할 수 있는데,

이는 Unreal 자료구조의 공통된 특징으로 보인다.

 

TMultiMap

TMultiMap<FString, int32> MyMultiMap;

// 여러 개의 값을 하나의 키에 매핑할 수 있습니다.
MyMultiMap.Add("KeyA", 10);
MyMultiMap.Add("KeyA", 20);
MyMultiMap.Add("KeyB", 30);
MyMultiMap.Add("KeyB", 40);

 

앞서 Map에서 Key의 중복이 가능해진 경우

TArray<int32> ValuesForKeyA = MyMultiMap.Find("KeyA");
for (int32 Value : ValuesForKeyA)
{
    // KeyA에 매핑된 값들을 출력합니다.
    UE_LOG(LogTemp, Warning, TEXT("Value for KeyA: %d"), Value);
}

 

TArray 형태로 하나의 Key에 Value가 저장됨.

 

https://docs.unrealengine.com/5.3/en-US/map-containers-in-unreal-engine/

 

TMap

TMaps are defined by two types, a key type and a value type, which are stored as associated pairs in the map.

docs.unrealengine.com

 

'Study > UNREAL' 카테고리의 다른 글

Unreal5 - Live Link Face 사용하기  (0) 2024.04.29
🪣 UNREAL Containers - TSet  (0) 2024.02.09
🪣UNREAL Containers - TArray  (0) 2024.02.09
🆎Unreal에서의 StringHandling(FName, FText, FString)  (0) 2024.02.08
언리얼 엔진의 포인터  (0) 2024.02.08

관련글 더보기

댓글 영역