UnrealEngine/UnrealEngine C++ 관련
[UE-CPP] FStruct를 TMap/TSet의 Key로 사용하고 싶다면?(with GetTypeHash)
에드윈H
2023. 7. 9. 15:09
TMap이나 TSet등에 다양한 데이터 값을 저장하려고 할때, Key로 사용되는 값을 넣는다.
그 중에서 Key로 FStruct 로 하고싶다면 추가해야할 함수가 있다.
MyStruct라는 구조체가 있다고 치자.
struct FMyStruct
{
private:
int SomeIntData=0;
public:
FMyStruct();
~FMyStruct();
};
이 구조체를 Key로 사용하려고 한 다면 2개의 함수를 추가 해주면 된다.
바로 비교(==) 연산자와 GetTypeHash 함수라는 전역 함수의 파라미터 FMyStruct 이다.
struct FMyStruct
{
private:
int SomeIntData=0;
public:
FMyStruct();
~FMyStruct();
//Override the comparison operator
bool operator==(const FMyStruct& Other) const
{
return SomeIntData==Other.SomeIntData;
}
};
FORCEINLINE uint32 GetTypeHash(const FMyStruct& MidiTime)
{
uint32 Hash = FCrc::MemCrc32(&MyStruct, sizeof(FMyStruct));
return Hash;
}
위 와같이 선언한다면 TMap이나 TSet의 key로 FMyStruct를 사용할 수 있다.
GetTypeHash 함수로 해당 Struct에 대한 고유한 Hash를 만들어주는 알고리즘이고, 엔진에서 FCrc::MemCrc32() 함수를 통해 구조체에 대한 해시를 생성해준다