TSet
TSet
是一种快速容器类,用于在排序不重要的情况下存储唯一元素。
一、创建
二、填充元素
1、Add()
和Emplace()
:添加元素
2、Append()
:添加其他TSet
中的多个元素
以上同TArray
一样
FruitSet.Add(TEXT("Banana"));
FruitSet.Add(TEXT("Grapefruit"));
FruitSet.Add(TEXT("Pineapple"));
FruitSet.Add(TEXT("Pear"));
FruitSet.Add(TEXT("Banana"));
// FruitSet = [Banana, Grapefruit, Pineapple, Pear]
三、迭代
同TMap
一样
// auto 范围遍历
for (auto& Elem : FruitSet)
{
Elem...;
}
// 迭代器迭代
for (auto Iter = FruitSet.CreateIterator(); Iter; ++Iter) // CreateConstIterator 只读迭代器
{
*Iter...;
}
四、查询
1、Num()
:查询TSet元素个数
int32 Count = FruitSet.Num(); // Count = 4
2、Contanis()
:查询是否包含某个元素
bool bHasBanana = FruitSet.Contains(TEXT("Banana")); // bHasBanana = true
bool bHasLemon = FruitSet.Contains(TEXT("Lemon")); // bHasLemon = false
3、[]
、Find()
:查找某个元素
FSetElementId
结构体可查找集合中某个键的索引。然后,就可使用该索引与 运算符[]
查找元素
FSetElementId BananaIndex = FruitSet.FindId(TEXT("Banana"));
FPlatformMisc::LocalPrint( // 打印 Banana
*FString::Printf(
TEXT(" \"%s\"\n"),
*FruitSet[BananaIndex]
)
);
FSetElementId LemonIndex = FruitSet.FindId(TEXT("Lemon"));
FPlatformMisc::LocalPrint( // 报错
*FString::Printf(
TEXT(" \"%s\"\n"),
*FruitSet[LemonIndex]
)
);
Find()
同TMap
一样,返回所查找元素的指针,如果不存在,返回nullptr
FString* PtrBanana = FruitSet.Find(TEXT("Banana"));
FString* PtrLemon = FruitSet.Find(TEXT("Lemon")); // 空指针
4、Array()
:根据TSet元素返回一个数组
TArray<FString> FruitArray = FruitSet.Array(); // FruitArray = [Banana, Grapefruit, Pineapple, Pear]
五、移除
1、Remove()
:移除元素
- 可根据
FSetElementId
移除指定元素 - 可根据元素值移除指定元素,返回移除元素个数
2、Empty()
和Reset()
:移除全部元素
同TMap
一样
六、排序
基本同TMap
一致
FruitSet.Sort([](const FString& A, const FString& B) {
return A > B;
});
// FruitSet = [Pear, Grapefruit, Banana]
FruitSet.Sort([](const FString& A, const FString& B) {
return A.Len() < B.Len();
});
// FruitSet = [Pear, Banana, Grapefruit]
七、运算符
1、赋值运算符=
同TArray
一样,是一次深拷贝
2、MoveTemp
同TArray
一样,支持移动语义MoveTemp
,移动后,源映射为空
八、Slack(空闲容量)
1、Reverse()
:分配内存
同TArray
一样,分配内存,无需添加元素,如果分配的内存比当前小,则无效。
2、Shrink()
和Compact()
:移除所有Slack
Shrink()
将从容器的末端移除所有slack,如果映射中间存在slack则无法移除,首先应调用 Compact()
或CompactStable()
函数,将空白空间组合在一起,再调用Shrink()
,CompactStable
可在合并空元素时保持元素的排序。
九、KeyFuncs
同TMap
一致