관리 메뉴

기억을 위한 기록들

[UE-CPP] FStruct를 TMap/TSet의 Key로 사용하고 싶다면?(with GetTypeHash) 본문

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() 함수를 통해 구조체에 대한 해시를 생성해준다