TSet是一种快速容器,通常用于在排序不重要的情况下存储唯一元素
定义
TSet<FString>MySet;
//Tset
//增
MySet.Add(TEXT("Banana"));
MySet.Add(TEXT("Grapefruit"));
MySet.Add(TEXT("Pineapple"));
//add和Emplace功能相同,区别是Emplace可以避免在插入集合时创建临时文件
MySet.Emplace(TEXT("Orange"));
//合并元素
TSet<FString>MySet2;
MySet2.Add(TEXT("zhangsan"));
MySet2.Add(TEXT("lisi"));
MySet2.Add(TEXT("wangwu"));
//Append是将MySet2的值合并到MySet里面
MySet.Append(MySet2);
PrintSet();
//删
MySet.Remove(TEXT("Banana"));//会返回已删除的函数的数量,如果给定的键未包含在其中,则返回0
MySet.Empty();//清空容器并且会释放内存
MySet.Reset();//清空集合元素但是会保存内存
//查
int32 Count=MySet.Num();
bool isFind = MySet.Contains(TEXT("Banana"));//查询是否包含特定元素,找到为真,否者为假
FString*isFind2=MySet.Find(TEXT("Banana"));//返回的是指向元素数值的指针,如果不包含该键,则返回Null
输出
void AMyGameMode::PrintSet()
{
for (auto& TestSet:MySet)
{
GEngine->AddOnScreenDebugMessage(-1, 5.0f,FColor::Blue, FString::Printf(TEXT("%s"),*TestSet));
UE_LOG(LogTemp, Warning, TEXT("%s"), *TestSet);
}
}
特别
Array函数
//Array函数
TArray<FString> FuritArray = MySet.Array();//返还TArray,将TSet转换为了数组,里面填充了TSet每一个元素的副本
//排序
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;//将MySet的值赋予NewSet
NewSet.Add("TEXT(OneOne)");
//[]
FSetElementId Index = NewSet.Add(TEXT("TwoTwo"));//根据FSetElementId访问集合对应元素的引用
TestSet[Index] = TEXT("One");
//Reserve
TSet<FString>NewSet1;
NewSet.Reserve(10);//预选分配内存,若输入的Number大于元素的个数,则会产生闲置内存(Slack)
//Shrink
for (int32 i= 0; i < 10; i++)
{
NewSet1.Add(FString::Printf(TEXT("NewSet%d"), i));
}
for (int32 i = 0; i < 10; i+=2)
{
NewSet1.Remove(FSetElementId::FromInteger(i));//删除元素产生闲置内存
}
NewSet1.Shrink();//删除末端的空元素
//Compact将容器中的所有空白的元素集合到一起放到末尾,然后使用Shrink()删除
NewSet1.CompactStable();//使用Compact()可能会改变元素之间的顺序,使用CompactStable()可以不改变顺序
NewSet1.Shrink();
笔记总结来源于:【【虚幻5】UE5C++零基础全网全流程开发从入门到进阶教程合集(持续跟新中)】https://www.bilibili.com/video/BV1Dc411f7nx?vd_source=90cb1ac44856e5e826e2bee8aa9d8a41