1. TSet容器基础认知
UE5中的TSet是一种基于哈希表的无序集合容器,它和TArray一起构成了Unreal Engine中最常用的两种集合类型。与TArray不同,TSet不保留元素的插入顺序,但提供了近乎恒定的查找时间复杂度(O(1))。这种特性使得TSet特别适合需要频繁查找但不需要顺序访问的场景。
TSet内部采用开放寻址法处理哈希冲突,当负载因子超过阈值时会自动扩容。默认情况下,TSet使用DefaultKeyFuncs进行哈希计算和相等比较,对于自定义类型需要重载这两个函数。一个典型的TSet声明如下:
cpp复制TSet<FString> FruitSet;
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 元素操作函数详解
2.1 添加元素:Add与Emplace
Add函数是最常用的元素添加方式,它接受一个已构造好的元素:
cpp复制FruitSet.Add(TEXT("Apple"));
FruitSet.Add(TEXT("Banana"));
Emplace则允许直接在容器内部构造元素,避免了临时对象的创建:
cpp复制FruitSet.Emplace(TEXT("Cherry")); // 直接在集合内构造FString
经验提示:对于简单类型(如内置类型、FString等),Add和Emplace性能差异不大。但对于构造开销大的复杂对象,Emplace通常更高效。
2.2 删除元素:Remove与Empty
Remove函数删除指定元素并返回是否成功删除:
cpp复制bool bRemoved = FruitSet.Remove(TEXT("Apple")); // 返回true如果元素存在
Empty函数有两种用法:
cpp复制FruitSet.Empty(); // 清空集合但保留内存
FruitSet.Empty(100); // 清空并预分配100个元素的空间
3. 容量与查询操作
3.1 基础查询函数
Num()返回集合中元素数量:
cpp复制int32 Count = FruitSet.Num();
Contains()检查元素是否存在:
cpp复制if(FruitSet.Contai
