一、TSet<T>是什么

UE4中,除了TArray动态数组外,还提供了各种各样的模板容器。这一节,我们就介绍集合容器——TSet<T>。类似于TArray<T>,尖括号里面的T是模板类型,可以是任何C++类型。一个集合表示了一组互不重复的数据元素。比如TSet<float>表示了一组float集合,TSet<FString>表示了一组FString集合。

二、创建和填充集合

因为这些容器在设计的时候考虑到一致性,所以后面你在学习各种各样的容器,你都会发现它们都具有相同或相似的函数,调用方法也是大同小异。类似TArray,TSet也有Add函数和Emplace函数:

TSet<int> set;
set.Add( 1 );
set.Add( 2 );
set.Emplace( 3 );
set.Add( 1 );// 这个操作虽然可以编译运行,但是因为其元素已经存在,所以不会对现有集合发生影响
set.Emplace( 2 );// 同上

注意,集合的内部数据结构是二叉树,而不是简单地按编号排序的,因此不能通过方括号[]来访问集合中的元素。

//set[0] = 4; //试图通过[]操作符来访问集合元素,但这样的操作是非法的

Tset中也有类似于TArray的Push函数,但是不叫Push,那就是Append函数,用法也是和Push一样的。

void Append( const TArray< ElementType > & InElements )
void Append( TArray< ElementType > && InElements )

三、迭代集合

因为TSet不能通过[]来访问容器里面的元素,所以也不能通过数值来迭代集合。因此我们要通过迭代器来访问集合:

for( TSet<int>::TIterator it = set.CreateIterator(); it; ++it ){GEngine->AddOnScreenDebugMessage( -1, 40.f, FColor::White, FString::FromInt( *it ) );
}

四、两个集合的操作

1) 交集

TSet中的Intersect函数提供了计算出两个集合的交集操作,下面是其函数声明:

TSet Intersect( const TSet & OtherSet )

示例:

TSet<int> X;
X.Add( 1 );
X.Add( 2 );
X.Add( 3 );
TSet<int> Y;
Y.Add( 2 );
Y.Add( 3 );
Y.Add( 4 );
TSet<int> intersection = X.Intersect(Y); // intersection的内容为{2,3}

2) 并集

TSet中的Union函数提供了计算出两个集合的并集操作,下面是其函数声明:

TSet Union( const TSet & OtherSet )

示例:

TSet<int> uni = X.Union(Y); // uni的内容为{1,2,3,4}

容器的功能可谓非常强大的,上面只是列举其常用的一二,在官方的文档中有全面的介绍。同时我们也认识到,容器的学习也是非常简单的,只要多加练习和查询文档便可。

转自:http://www.52vr.com/article-567-1.html

[unreal4入门系列之十六] UE4中的集合:TSet容器相关推荐

  1. [unreal4入门系列之十五] UE4中的动态数组:TArray容器

    为什么使用UE4提供的容器类? 如果你用过C++的STL库,你就知道STL提供了各种各样的容器/数据结构,使得你对处理很多数据的时候非常快捷高效.UE4同样也提供了类似的库,库里面的类型是以T开头的, ...

  2. [unreal4入门系列之十一] 在UE4中编写C++代码控制角色

    当你运行我们上次做完的项目,你可能会意识到我们移动的摄像机还是默认的那个摄像机,这个默认的摄像机可以自由飞翔.这一节,我们要使得开始的角色是我们的一个Avatar类的实例对象,并且使用键盘控制我们的角 ...

  3. Reflex WMS入门系列二十六:合并托盘

    Reflex WMS入门系列二十六:合并托盘 仓库管理业务实践中,对于仓库里的库存,将几个零托合并成一个托,也是比较常见的作业.Reflex WMS系统自然要能支持这种合并托盘(Merge HDs)的 ...

  4. [unreal4入门系列之十四] 在UE4中添加碰撞触发事件

    一.在HUD中显示消息 1) 在MyHUD.h中定义一个结构来表示我们的消息: #pragma once #include "GameFramework/HUD.h" #inclu ...

  5. [unreal4入门系列之十二] 在UE4中创建非玩家角色(NPC)

    现在我们来创建一些NPC(non-playable characters,非玩家角色).在这个游戏中,当我们靠近NPC时,它们会做出相应的反应. 创建C++类 1) 在UE编辑器中,打开文件-新建C+ ...

  6. Spring Boot入门系列(十六)整合pagehelper,一秒实现分页功能!

    之前讲了Springboot整合Mybatis,然后介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.接下来要说一说Mybatis 的分页 ...

  7. STM32F103五分钟入门系列(十六)输入捕获(精雕细琢-.-)

    学习板:STM32F103ZET6 往期博客: STM32F103五分钟入门系列(一)跑马灯(库函数+寄存器)+加编程模板+GPIO总结 STM32F103五分钟入门系列(二)GPIO的七大寄存器+G ...

  8. [unreal4入门系列之十] UE4添加角色到场景中

    现在我们已经有了一个场景并且运行了,我们需要添加一个角色到场景中.要这样做,我们必须从UE4的GameFramework类继承它. 一. 打开上次创建的关卡 如果你已经关闭了项目,并且保存了上次创建的 ...

  9. Windows Server入门系列之十六 端口、连接与端口扫描

    端口与连接是网络中两个非常基础的概念,本篇博文将介绍相关的一些基础知识. 1.端口 我们在学习网络技术时经常会提到80端口.21端口等,这些端口到底指的是什么呢?要注意,它们可不是像路由器或交换机上的 ...

最新文章

  1. 【BZOJ4004】装备购买(线性基)
  2. 马克思关于劳动的八大金句
  3. asp网站配置错误解决汇总_1
  4. 计算机组成原理mbps,2016年湖北师范学院计算机组成原理(同等学力加试)复试笔试仿真模拟题...
  5. 管理感悟:经历不是经验,套路才是
  6. 实用新型专利申请文件撰写示例
  7. ffmpeg 反复推流_FFmpeg 推流问题记录
  8. Java编译器和Java解释器---即时编译器和JAVA解释器
  9. 数据分析之落地sop流程
  10. WPS无法保存——以下内容无法保存在未启用宏的文档中.vb工程
  11. 选取域名需要注意的几个方面
  12. 什么是UTF-8编码
  13. DWG文件如何转换为PDF黑白文件
  14. Linux服务之DHCP服务篇(scp)
  15. 6.3.1广度优先搜索
  16. PTA L1-003 个位数统计(详解)
  17. 二手手机设备回收小程序开发
  18. gms认证流程_Google GMS认证要求与申请流程
  19. MIPS反汇编拆炸弹
  20. vim E486不存在::wq 错误笔记

热门文章

  1. 【STM32-V7】STM32H743XIH6开发板,丰富软件资源,强劲硬件配置,大量软件解决方案持续更新中(2020-07-22)
  2. 【笔记】Error while loading PyV8 binary: exit code 1解决方法
  3. 解决【Bootstrap‘s JavaScript requires jQuery】的问题
  4. 声明一个const数组
  5. 如何将Git存储库克隆到特定文件夹?
  6. 什么是反射,为什么有用?
  7. beta冲刺(2/7)
  8. ftp使用(图文详解)
  9. 清华大学 现代软件工程 结对编程项目 (一)
  10. iOS开发 - OC - PCH文件使用