容器TArray
TArray
是虚幻C++中的动态数组
特点:
- 速度快、内存消耗小、安全性高
TArray
所有元素均为完全相同类型,不能进行不同元素类型的混合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
MyArray.Add(10); MyArray.Add(20); MyArray.Add(30); MyArray.AddUnique(20); MyArray.AddUnique(40);
MyArray.Remove(20); MyArray.RemoveAt(0); MyArray.RemoveSingle(10); MyArray.Empty(); MyArray.Reset();
MyArray.Insert(60, 0); int32& temp = MyArray[0]; temp = 50;
MyArray.Contains(10); MyArray.Find(10); MyArray.FindLast(10);
void AMyGameMode::PrintArray() { for (auto It = MyArray.CreateConstIterator(); It; It++) { UE_LOG(LogTemp, Warning, TEXT("%d"), *It); GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Blue, FString::Printf(TEXT("%d"), *It)); } }
|
容器TMap
TMap
是虚幻C++中的一种键值对容器
特点:
- 数据成对出现(Key,Value)
- Value通过Key获取,且Key值不能重复
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
MyMap.Emplace(0, 1); MyMap.Emplace(1, 2); MyMap.Emplace(2, 3);
MyMap.Remove(0); MyMap.Empty();
MyMap.Contains(1); int32* isFind1 = MyMap.Find(2); const int32* isFind2 = MyMap.FindKey(3);
TArray<int32> TestKeys; TArray<int32> TestValues; MyMap.GenerateKeyArray(TestKeys); MyMap.GenerateValueArray(TestValues);
for(auto& TestMap:MyMap){ GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Blue, FString::Printf(TEXT("Key:%d""Value:%d"), TestMap.Key, TestMap.Value)); UE_LOG(LogTemp, Warning, TEXT("Key:%d""Value:%d"), TestMap.Key, TestMap.Value); }
|
容器TSet
Tset
是一种快速容器类,通常用于排序不重要的情况下存储唯一元素
TSet
类似于TMap
和TMultiMap
,但有一个重要区别:TSet
是通过对元素求值的可覆盖函数,使用数据值本身作为键
TSet
可以非常快速地添加、查找和删除元素(恒定时间)
TSet
也是值类型,支持常规复制、赋值和析构函数操作,以及其元素具有较强的所有权
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
MySet.Add(TEXT("Banana")); MySet.Add(TEXT("Apple")); MySet.Emplace(TEXT("Orange")); PrintSet();
TSet<FString>MySet2; MySet2.Add(TEXT("wangsen")); MySet2.Add(TEXT("lindanqi")); MySet.Append(MySet2); GEngine->AddOnScreenDebugMessage(-1,5.0f,FColor::Cyan,TEXT("==============")); PrintSet();
MySet.Remove(TEXT("Banana")); MySet.Empty(); MySet.Reset();
int32 size = MySet.Num(); bool isFind1=MySet.Contains(TEXT("Banana")); FString* isFind2 = MySet.Find(TEXT("Banana"));
TArray<FString> FruitArray = MySet.Array();
TSet<FString> TestSet = { TEXT("a"),TEXT("aa"),TEXT("aaa"),TEXT("aaaa") }; TestSet.Sort([](FString A, FString B) { return A.Len() > B.Len(); });
TSet<FString>NewSet; NewSet = MySet; NewSet.Add(TEXT("One"));
FSetElementId Index = NewSet.Add(TEXT("Two")); TestSet[Index] = TEXT("NewTwo");
TSet<FString>NewSet1; NewSet1.Reserve(10);
for (int32 i = 0; i < 10; i++) { NewSet1.Add(FString::Printf("NewSet % d", i)); } for (int32 i = 0; i < 10; i += 2) { NewSet1.Remove(FSetElementId::FromInteger(i)); } NewSet.Shrink();
NewSet1.Compact(); NewSet1.Shrink();
|