一、TMap是什么

TMap是UE4中的一种关联容器,每个键都关联着一个值,形成了单映射关系。因此你可以通过键名来快速查找到值。此外,单映射要求每个键都是唯一的。

二、创建和填充单映射

如果你想创建一种单映射关系,每一个角色的名称对应着价格:

TMap charaPrice;

现在,让我们来添加角色名称和价格的单映射关系:

charaPrice.Add("皮城执法官",  );
charaPrice.Add("皎月女神", );
charaPrice.Add("暗影之拳", );
charaPrice.Add("德玛西亚皇子", );

这样就完成了填充单映射,之后,你可以很方便地使用charaPrice[“暗影之拳”]来取得这个角色的价格为3150金币。

三、迭代单映射

由于单映射的数据结构也不是线性关系,而是二叉树。因此一般情况下,我们也不能通过下标索引来迭代单映射。但是我们依然可以使用迭代器进行迭代(由此看出使用迭代器进行迭代可以使得各种容器的迭代操作保持一致):

for(TMap<FString, int>::TIterator it = charaPrice.CreateIterator(); it; ++it){
GEngine->AddOnScreenDebugMessage(-, .f, FColor::White,
it->Key + FString(" 的出售价格为: ") + FString::FromInt(it->Value) + FString("金币。"));
}

注意的是,迭代器指向了单映射的每一个元素时,可以用key来取得元素的键,用Value来取得元素的值。

四、代码展示

void ANPC::Prox_Implementation(AActor* otherActor, UPrimitiveComponent* otherComp, int32 otherBodyIndex, bool bFromSweep, const FHitResult & sweepResult)
{
//通过强制转换成AAVatar是否成功来判断是否玩家角色
if (Cast<AAvatar>(otherActor) == nullptr)
{
return;
}
//获得第一人称控制器
APlayerController* PController = GetWorld()->GetFirstPlayerController();
if (PController)
{
//获得HUD界面
AMyHUD* hud = Cast<AMyHUD>(PController->GetHUD());
hud->AddMessage(Message(NpcMessage, .f, FColor::White));
//测试Map
TMap charaPrice;
charaPrice.Add(L"皮城执法官", );
charaPrice.Add(L"皎月女神", );
charaPrice.Add(L"暗影之拳", );
charaPrice.Add(L"德玛西亚皇子", );
//在使用容器的时候,为了容器的操作一致性,通常都会像下面这样使用迭代器来循环
//所谓的迭代器其实类似于一个指针,当对指针进行++时,就指向后面的元素。
//当超出容器范围的时候,迭代器为空,跳出循环
for (TMap<FString, int32>::TIterator it = charaPrice.CreateIterator(); it; ++it)
{
//GEngine是全局引擎变量,我们使用它的AddOnScreenDebugMessage函数来在游戏屏幕上打印调试信息。
//该函数第一个参数是调试输出的位置,填写-1就不会覆盖以前的调试信息。
//第二个参数是字体大小,第三个参数是字体颜色,第四个参数是要打印的字符串,这里用FromInt函数将Int转换FString。
GEngine->AddOnScreenDebugMessage(-, .f, FColor::White, it->Key + FString(L" 的出售价格为: ") + FString::FromInt(it->Value) + FString(L"金币。"));
}
}
}

现在我们学了最常用的三种容器,动态数组容器——TArray,集合容器——TSet还有单映射——TSet。当然还有各种各样的容器,它们的操作都是大同小异的。C++的泛型编程的优点也在于此,它们提供了相似的接口使得我们非常容易精通各种各样高效的容器。在游戏开发中,我们很少会重新写基本的数据结构类型,因为游戏引擎已经为我们提供好了大多数的数据结构。但是并不意味着没有必要学习数据结构,只有当你学习过数据结构,才能熟练地运用游戏引擎为我们提供的容器。这和我们的学习游戏引擎原理于使用游戏引擎的关系是一样的。所以建议大家,学习工具的同时,不要忘记了同时学习工具的原理哦!

[UE4]单映射:TMap容器,字典表的更多相关文章

  1. UE4中的单映射:TMap容器

    一.TMap<T>是么 TMap<T>是UE4中的一种关联容器,每个键都关联着一个值,形成了单映射关系.因此你可以通过键名来快速查找到值.此外,单映射要求每个键都是唯一的.类似 ...

  2. 1.12 dict 字典表

    dict 字典表属于映射分类 dict的声明 >>> #dict类型 是 {}中包含若干个键值对 >>> d = dict() >>> d = { ...

  3. 第三天:字典表dict、元组tuple、文件与类型汇总

    1.字典表dict 声明 {键: 值,...} dict(键=值) d = {'isbn':'13123','title':'python入门'} #字典表中的键不能使用诸如列表这种可以改变的,只能使 ...

  4. jeecg字典表—报表配置(popup弹框)

    新建字典表 录入字典数据 新建报表配置 新建用于popup的表 字典Code中对应,用户接受popup返回的字段(按顺序写) 结果校验

  5. 一个表里有多个字段需要同时使用字典表进行关联显示,如何写sql查询语句

    参考:https://bbs.csdn.net/topics/330032307 数据库里面有一个字典表,这张表里面有id段和对应的名字字段.在另外一个记录的表里面有对应的上述字典表的id,而且有多个 ...

  6. 只有设置了 name 属性的表单元素才能在提交表单时传递它们的值

    $(function () { var wait = $("<img src=\"\" alt=\"正在上传\"/>"); $( ...

  7. AWS、Azure和Google的云容器注册表有什么区别?

    亚马逊云计算服务(AWS).谷歌云服务和微软Azure,这三大公共云平台都提供Docker容器注册表.虽然他们的产品看起来很相似,但开发人员在做出选择之前,应该先了解价格和功能方面的差异. 公共云供应 ...

  8. Docker基础-端口映射与容器互联

    1.端口映射实现访问容器 1.从外部访问容器应用 在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内部的网络应用和服务的. 当容器中运行一些网络应用,要让外部访问这些应用时, ...

  9. Jquery easyui 重置按钮,easyui 清空表单,Jquery easyui 重置表单

    Jquery easyui 重置按钮,easyui 清空表单,Jquery easyui 重置表单 >>>>>>>>>>>>&g ...

随机推荐

  1. 电脑同时安装python2和python3, 如何实现切换使用

    由于历史原因,Python有两个大的版本分支,Python2和Python3,又由于一些库只支持某个版本分支,所以需要在电脑上同时安装Python2和Python3,因此如何让两个版本的Python兼 ...

  2. HDU 3046

    http://acm.hdu.edu.cn/showproblem.php?pid=3046 典型的最小割模型 #include <iostream> #include <cstdi ...

  3. 6.1 socket 长连接、短连接

    一般情况下,服务器的长连接和短连接不是服务器说了算,而是客户端说了算.因为服务器是给别人提供业务的,一旦连接建立起来之后,服务器端不会主动把连接给close掉. 客户端发送一笔业务,没有关闭连接,然后 ...

  4. gcc -o test test.c编译报错

    报错内容 /tmp/cc7eQyD4.o: In function `main':test.c:(.text+0x51): undefined reference to `sqrt'collect2: ...

  5. [LeetCode&Python] Problem 136. Single Number

    Given a non-empty array of integers, every element appears twice except for one. Find that single on ...

  6. Windows 服务器配置、运行、图文流程(新手必备!) - IIS建站配置一条龙

    Window 2008 服务器的配置教程 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar ...

  7. CF1083(div1)

    A. The Fair Nut and the Best Path 题意:给定有点权,有边权的树,让你选择一条链(也可以是只有一个点),使得点权之和-边权最大. 思路:裸的树形DP,我们用dp[i]表 ...

  8. Battle City 优先队列+bfs

    Many of us had played the game "Battle city" in our childhood, and some people (like me) e ...

  9. Restrictions用法

    HQL运算符 QBC运算符 含义 = Restrictions.eq() 等于equal <>  Restrictions.ne() 不等于not equal >  Restrict ...

  10. vue-cli 打包报错:Unexpected token: punc (()

    vue-cli 打包报错: ERROR in static/js/vendor.ed7d2353f79d28a69f3d.js from UglifyJs Unexpected token: punc ...