UnrealEngine4 | 언리얼엔진4

언리얼엔진 컨테이너 종류

gyunnnnnn 2022. 11. 4. 00:06

TArray, TSet, TMap 정리

TArray

기본

FString Arr[] = { TEXT("of"), TEXT("Tomorrow") };
StrArr.Append(Arr, ARRAY_COUNT(Arr));
StrArr == ["Hello","World","of","Tomorrow"]
TArray<int32> IntArray;
  • = 연산으로 복사 할 수 있다.

각종 함수

  • Append는 다른 TArray 또는 일반 배열로의 포인터 및 해당 배열의 크기에 다수의 엘리먼트를 한꺼번에 추가한다.
  • Append 함수 대신 +=를 통해 배열을 연결시킬 수 있다.
  • AddUnique는 기존 컨테이너에 동일한 요소가 이미 존재하지 않는 경우 새 요소만 추가한다.
  • InsertAdd, Emplace, Append 처럼 단일 엘리먼트나 엘리먼트 배열 사본을 주어진 인덱스에 추가시킨다.
  • SetNum함수에 배열 엘리먼트 번호를 설정할 수 있다.
  • SetNum에 설정된 번호가 현재 배열 번호보다 큰 경우 기본 생성자의 엘리먼트 유형을 사용해서 엘리먼트를 새로 만든다.
  • SetNum의 번호가 현재 배열 번호보다 작은 경우 엘리먼트를 제거한다.
  • Num함수를 사용해서 배열에 요소가 몇 개인지 확인할 수 있다.
  • Remove함수로 같은 요소를 모두 지울 수 있다.
  • RemoveSingle은 처음 일치한 요소를 지운다.
  • RemoveAt으로 인덱스를 지정하여 삭제할 수 있다.
  • MoveTemp를 통해 이동 의미론도 지원할 수 있다.

이터레이션

  • C++의 범위 for문을 사용하면 된다.
FString JoinedStr;
for (auto& Str : StrArr)
{
  JoinedStr += Str;
  JoinedStr += TEXT(" ");
}
  • 인덱스 기반 반복처리도 가능하다.
for (int32 Index = 0; Index != StrArr.Num(); ++Index)
{
  JoinedStr += StrArr[Index];
  JoinedStr += TEXT(" ");
}

정렬

  • Sort함수를 호출하여 간단히 소팅할 수 있다.
StrArr.Sort([](const FString& A, const FString& B) {
    return A.Len() < B.Len();
});
  • HeapSort 함수는 이진 술부가 있든 없든, 힙 소팅에 사용 가능하다.
  • StableSort를 통해 정렬 후에도 같은 요소의 순서를 유지할 수 있다.

TSet

기본

FruitSet.Add(TEXT("Banana"));
FruitSet.Add(TEXT("Grapefruit"));
FruitSet.Add(TEXT("Pineapple"));
  • 순서가 중요치 않은 상황에서 고유 요소를 저장하는 데 사용되는 고속 컨테이너 클래스
  • 하나의 파라미터만 필요하다.
  • 키는 고유성이 보존된다.
  • = 연산자를 통해 복사할 수 있다.

각종 함수

  • Num함수를 통해 맵에 존재하는 요소의 개수를 알 수 있다.
  • Contains함수를 통해 맵에 특정 키가 있는지 여부를 알 수 있다.
  • FSetElementId 구조체를 사용하여 set 내의 키 인덱스를 찾을 수 있다.
  • Array 함수는 TSet의 모든 요소 사본으로 채워진 TArray를 반환한다.
  • Emplace로 임시 생성을 피할 수 있다.
  • Remove 함수에 키를 넣어 제거할 수 있다.
  • Remove 함수에 인덱스를 붙여 제거할 수 있지만 이터레이션 처리 도중에 사용하는게 좋다.
  • Empty, Reset 함수로 모든 엘리먼트를 제거할 수 있다.

이터레이션

  • C++의 범위 for문을 사용하면 된다.
for (auto& Elem : FruitSet)
{
    FPlatformMisc::LocalPrint(
        *FString::Printf(
            TEXT(" \"%s\"\n"),
            *Elem
        )
    );
}

정렬

  • Sort 함수를 통해 소팅이 가능하고 소팅 순서를 나타내는 이항 술부를 받는다.
FruitSet.Sort([](const FString& A, const FString& B) {
    return A > B; // sort by reverse-alphabetical order
});

FruitSet.Sort([](const FString& A, const FString& B) {
    return A.Len() < B.Len(); // sort strings by length, shortest to longest
});

TMap

기본

TMap<int32, FString> FruitMap;
FruitMap.Add(5, TEXT("Banana"));
FruitMap.Add(2, TEXT("Grapefruit"));
FruitMap.Add(2, TEXT("Pear")); // 나중에 추가한 Pear로 대체됨
FruitMap.Emplace(3, TEXT("Orange"));
  • 키-값 짝으로 저장한다.
  • 저장 및 불러올 때는 키만 사용한다.
  • 키와 값은 값 유형이어야 한다.
  • 키유형은 GetTypeHash를 지원하고 operator==가 제공되어야 한다.

각종 함수

  • Emplace로 임시 생성을 피할 수 있다.
  • Append를 사용하여 다른 맵에서 모든 요소를 삽입시켜 병합하는것이 가능하다.
  • Num함수를 통해 맵에 존재하는 요소의 개수를 알 수 있다.
  • Contains함수를 통해 맵에 특정 키가 있는지 여부를 알 수 있다.
  • FindKey함수를 통해 역조회 할 수 있다(제공된 값에 대한 키를 검색)
  • Remove함수에 키를 넣어 요소를 제거할 수 있다.
  • FindAndRemoveChecked함수로 맵의 요소를 제거하고 그 값을 반환하는 데 사용한다.
  • RemoveAndCopyValue함수는 제거된 요소 값을 레퍼런스 파라미터로 복사한다.
  • = 연산자를 통해 복사가 가능하다.

이터레이션

  • C++의 범위 for문을 사용하면 된다.
for (auto& Elem : FruitMap)
{
    FPlatformMisc::LocalPrint(*FString::Printf(TEXT("(%d, \"%s\")\n"), Elem.Key, *Elem.Value));
}

정렬

  • KeySort, ValueSort 함수를 통해 소팅이 가능하고 소팅 순서를 나타내는 이항 술부를 받는다.
FruitMap.KeySort([](int32 A, int32 B) {
    return A > B; // sort keys in reverse
});

FruitMap.ValueSort([](const FString& A, const FString& B) {
    return A.Len() < B.Len(); // sort strings by length
});

'UnrealEngine4 | 언리얼엔진4' 카테고리의 다른 글

언리얼엔진 String  (0) 2022.11.16
액터 가져오기, Serialize  (0) 2022.11.05