본문 바로가기

프로그래밍

UE5 구조체에서 operator< 를 오버라이드하여 자동 정렬하는 방법

728x90
728x90

 

언리얼 엔진 5 (UE5) 에서 구조체를 사용할 때, 배열을 정렬하는 깔끔한 방법을 소개해 드립니다.

특히 자동화 작업(Automation Task) 같은 구조체를 정렬할 때 유용한 팁인데요. 매번 람다식을 쓰지 않고, 아예 구조체 자체에 operator< 를 오버라이드해서 자동으로 정렬되게 만드는 방법입니다.

바로 시작해 볼게요 :)


기존 방식: Sort() + 람다식 사용하기

보통 UE5에서 배열을 정렬할 때는 이렇게 람다식을 사용합니다.

TArray<FAutomationTask> AutomationTasks;

AutomationTasks.Sort([](const FAutomationTask& A, const FAutomationTask& B) {
    return A.OperatorOverridePriority < B.OperatorOverridePriority;
});
 

이렇게 하면 OperatorOverridePriority 값을 기준으로 정렬되지만, 매번 정렬할 때마다 람다식을 넣어줘야 해서 코드가 지저분해질 수 있습니다.


깔끔한 방법: 구조체에 operator< 오버라이드하기

구조체 안에 < 연산자를 오버라이드하면, 배열 정렬 시 자동으로 이 연산자를 사용해서 정렬됩니다!

구조체 예제

USTRUCT(BlueprintType)
struct FAutomationTask
{
    GENERATED_BODY()

    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    FString TaskName;

    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 OperatorOverridePriority; // 숫자가 낮을수록 높은 우선순위

    // operator< 오버라이드
    bool operator<(const FAutomationTask& Other) const
    {
        return OperatorOverridePriority < Other.OperatorOverridePriority;
    }
};
 

이제 정렬할 때는 아주 간단합니다!

TArray<FAutomationTask> AutomationTasks;
AutomationTasks.Sort(); 
 

✅ 자동으로 OperatorOverridePriority 기준 정렬!

깔끔하죠? 😄


보너스: 동점(Tie-breaker) 처리까지!

만약 우선순위가 같은 경우가 있을 때를 대비해서, 추가로 타이 브레이커 를 넣을 수도 있습니다.

예를 들어, 이름 기준으로 추가 정렬하고 싶다면 이렇게요:

bool operator<(const FAutomationTask& Other) const
{
    if (OperatorOverridePriority == Other.OperatorOverridePriority)
    {
        return TaskName < Other.TaskName; // 이름으로 추가 정렬
    }
    return OperatorOverridePriority < Other.OperatorOverridePriority;
}
 

이렇게 하면 우선순위가 같을 때 TaskName 으로 정렬됩니다.

정렬 결과가 더 예측 가능하고 안정적이에요!


 

정리

  • ✔️ operator< 오버라이드 를 하면 정렬할 때 더 이상 람다식을 쓸 필요가 없습니다.
  • ✔️ 코드가 훨씬 간결하고 깔끔해집니다.
  • ✔️ 다른 개발자들이 쓸 때도 실수 없이 일관성 있게 사용됩니다.
  • ✔️ 필요하면 타이 브레이커로 정렬 안정성을 높일 수 있습니다.

 

 

728x90
반응형