如何用单页面框架制作51传奇网页游戏?
摘要:网站用单页面框架做,51传奇网页游戏,wordpress+左侧导航,在线名片设计TSet 官方文档:虚幻引擎中的Set容器 | 虚幻引擎 5.5 文档 | Epic Developer Community (e
网站用单页面框架做,51传奇网页游戏,wordpress+左侧导航,在线名片设计TSet
官方文档#xff1a;虚幻引擎中的Set容器 | 虚幻引擎 5.5 文档 | Epic Developer Community (epicgames.com)
TSet 是通过对元素求值的可覆盖函数#xff0c;使用数据值本身作为键#xff0c;而不是将数据值与独立的键相关联。
默认情况下#xff0c;TSet 不支持重…TSet
官方文档虚幻引擎中的Set容器 | 虚幻引擎 5.5 文档 | Epic Developer Community (epicgames.com)
TSet 是通过对元素求值的可覆盖函数使用数据值本身作为键而不是将数据值与独立的键相关联。
默认情况下TSet 不支持重复的键但使用模板参数可激活此行为。
TSet 是一种快速容器类用于在排序不重要的情况下存储唯一元素。TSet 可以非常快速地添加、查找和删除元素恒定时间。在大多数情况下只需要一种参数——元素类型。但是TSet 可配置各种模板参数来改变其行为使其更全面。除了可指定从 DefaultKeyFuncs 的派生结构体来提供散列功能还可允许集合中的多个键拥有相同的值。它和其它容器类一样可设置自定义内存分配器来存储数据。
和 TArray 一样TSet 是同质容器。TSet 也是值类型支持常规复制、赋值和析构函数操作以及其元素较强的所有权。TSet 被销毁时其元素也将被销毁。键类型也必须是值类型。
TSet 使用散列即如果给出了 KeyFuncs 模板参数该参数会告知集合如何从某个元素确定键如何比较两个键是否相等如何对键进行散列以及是否允许重复键。它们默认只返回对键的引用使用 运算符 对比相等性使用非成员函数 GetTypeHash 进行散列。默认情况下集合中不允许有重复的键。如果您的键类型支持这些函数则可以将其用作集合键无需提供自定义 KeyFuncs。要写入自定义 KeyFuncs可扩展 DefaultKeyFuncs 结构体。
最后TSet 可通过任选分配器控制内存分配行为。标准虚幻引擎4UE4分配器如 FHeapAllocator 和 TInlineAllocator不能用作 TSet 的分配器。实际上TSet 使用集合分配器该分配器可定义集合中使用的散列桶数量以及用于存储元素的标准UE4分配器。
与 TArray 不同的是内存中 TSet 元素的相对排序既不可靠也不稳定对这些元素进行迭代很可能会使它们返回的顺序和它们添加的顺序有所不同。这些元素也不太可能在内存中连续排列。集合中的后台数据结构是稀疏数组(在数组中有空位。从集合中移除元素时稀疏数组中会出现空位)。将新的元素添加到阵列可填补这些空位。
但是即便 TSet 不会打乱元素来填补空位指向集元素的指针仍然可能失效因为如果存储器被填满又添加了新的元素整个存储可能会重新分配。
1.创建和填充集合
创建一个MapActor类并继承于Actor其与TArray创建方法一样就不一一详细介绍
Actor类头文件增添代码:
publicUFUNCTION(BlueprintCallable)void InitSet();
源文件增添代码
void ASetActor::InitSet()
{TSetFString FruitSet;//此处的元素按插入顺序排列但不保证这些元素在内存中实际保留此排序。//如果是新集合可能会保留插入排序但插入和删除的次数越多新元素不出现在末尾的可能性越大。FruitSet.Add(TEXT(Banana));FruitSet.Add(TEXT(Grapefruit));FruitSet.Add(TEXT(Pineapple));// FruitSet [ Banana, Grapefruit, Pineapple ]FruitSet.Add(TEXT(Pear));FruitSet.Add(TEXT(Banana));//此处与上面的键重复因此覆盖了但此处会触发扩容// FruitSet [ Banana, Grapefruit, Pineapple, Pear ]// Note:Only one banana entry.//此处参数直接传递给键类型的构造函数。这可以避免为该值创建临时 FString。//与 TArray 不同的是只能使用单一参数构造函数将元素放到集合中。
