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
반응형
'프로그래밍' 카테고리의 다른 글
언리얼 엔진 5 (UE5) TArray의 Push 와 Pop 은 왜 FILO 인가요? (0) | 2025.04.07 |
---|---|
언리얼 엔진 5(UE5)에서 캐릭터 위치에서 벡터 그리기 (0) | 2025.03.10 |
언리얼 엔진 5 (UE5) FRotator → FQuat 변환 방법 (0) | 2025.03.06 |
언리얼 엔진 5: 월드 파티션 환경에서 TeleportTo 시 액터 복제 (0) | 2025.02.20 |
언리얼 엔진 5 (UE5) 에서 캐릭터와 액터 사이의 가장 가까운 점 구하기 (C++ 코드) (0) | 2025.02.18 |