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
는 기존 컨테이너에 동일한 요소가 이미 존재하지 않는 경우 새 요소만 추가한다.
Insert
는 Add
, Emplace
, Append
처럼 단일 엘리먼트나 엘리먼트 배열 사본을 주어진 인덱스에 추가시킨다.
SetNum
함수에 배열 엘리먼트 번호를 설정할 수 있다.
SetNum
에 설정된 번호가 현재 배열 번호보다 큰 경우 기본 생성자의 엘리먼트 유형을 사용해서 엘리먼트를 새로 만든다.
SetNum
의 번호가 현재 배열 번호보다 작은 경우 엘리먼트를 제거한다.
Num
함수를 사용해서 배열에 요소가 몇 개인지 확인할 수 있다.
Remove
함수로 같은 요소를 모두 지울 수 있다.
RemoveSingle
은 처음 일치한 요소를 지운다.
RemoveAt
으로 인덱스를 지정하여 삭제할 수 있다.
MoveTemp
를 통해 이동 의미론도 지원할 수 있다.
이터레이션
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
함수로 모든 엘리먼트를 제거할 수 있다.
이터레이션
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
함수는 제거된 요소 값을 레퍼런스 파라미터로 복사한다.
- = 연산자를 통해 복사가 가능하다.
이터레이션
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
});