一、TMap是什么
TMap是UE4中的一种关联容器,每个键都关联着一个值,形成了单映射关系。因此你可以通过键名来快速查找到值。此外,单映射要求每个键都是唯一的。二、创建和填充单映射
如果你想创建一种单映射关系,每一个角色的名称对应着价格:TMap charaPrice;现在,让我们来添加角色名称和价格的单映射关系:
charaPrice.Add("皮城执法官", 6300 ); charaPrice.Add("皎月女神", 6300); charaPrice.Add("暗影之拳", 3150); charaPrice.Add("德玛西亚皇子", 4800);这样就完成了填充单映射,之后,你可以很方便地使用charaPrice[“暗影之拳”]来取得这个角色的价格为3150金币。
三、迭代单映射
由于单映射的数据结构也不是线性关系,而是二叉树。因此一般情况下,我们也不能通过下标索引来迭代单映射。但是我们依然可以使用迭代器进行迭代(由此看出使用迭代器进行迭代可以使得各种容器的迭代操作保持一致):
- for(TMap<FString, int>::TIterator it = charaPrice.CreateIterator(); it; ++it){
- GEngine->AddOnScreenDebugMessage(-1, 30.f, FColor::White,
- it->Key + FString(" 的出售价格为: ") + FString::FromInt(it->Value) + FString("金币。"));
- }
运行后可以看到输出结果:

四、代码展示
- 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, 5.f, FColor::White));
- //测试Map
- TMap charaPrice;
- charaPrice.Add(L"皮城执法官", 6300);
- charaPrice.Add(L"皎月女神", 6300);
- charaPrice.Add(L"暗影之拳", 3150);
- charaPrice.Add(L"德玛西亚皇子", 4800);
- //在使用容器的时候,为了容器的操作一致性,通常都会像下面这样使用迭代器来循环
- //所谓的迭代器其实类似于一个指针,当对指针进行++时,就指向后面的元素。
- //当超出容器范围的时候,迭代器为空,跳出循环
- for (TMap<FString, int32>::TIterator it = charaPrice.CreateIterator(); it; ++it)
- {
- //GEngine是全局引擎变量,我们使用它的AddOnScreenDebugMessage函数来在游戏屏幕上打印调试信息。
- //该函数第一个参数是调试输出的位置,填写-1就不会覆盖以前的调试信息。
- //第二个参数是字体大小,第三个参数是字体颜色,第四个参数是要打印的字符串,这里用FromInt函数将Int转换FString。
- GEngine->AddOnScreenDebugMessage(-1, 30.f, FColor::White, it->Key + FString(L" 的出售价格为: ") + FString::FromInt(it->Value) + FString(L"金币。"));
- }
- }
- }