📅  最后修改于: 2023-12-03 14:48:08.883000             🧑  作者: Mango
在UE4中,TMap是一个非常有用的数据结构。它允许您将一个键(key)映射到一个值(value)。 TMap类似于C++中的std :: map和std :: unordered_map。但是,在UE4中,TMap是一个核心的蓝图和C++数据结构,特别是在UE4游戏开发中,这是经常使用的数据结构之一。
在这篇文章中,我们将讨论如何在UE4中使用C++迭代TMap。我们将介绍一些方法,以及如何使用这些方法来更好地管理TMap中的数据。
让我们先看一下TMap的简单用法。
假设我们想要存储一个学生的姓名(key)和分数(value)。我们可以这样做:
TMap<FString, int32> StudentScoreMap;
StudentScoreMap.Add("John", 80);
StudentScoreMap.Add("Mary", 90);
StudentScoreMap.Add("Tom", 75);
这样我们就建立了一个TMap,其中包含三个学生的姓名和分数。要访问TMap中的值,我们可以这样做:
int32 Score;
StudentScoreMap.TryGetValue("John", Score);
这将返回“Score”中的80。要更新一个学生的分数,我们可以将其键和新值传递给“Add”方法。例如,要将John的分数更新为85,我们可以这样做:
StudentScoreMap.Add("John", 85);
现在让我们来看看如何在UE4中使用C++迭代TMap。我们将使用上面的示例TMap来解释。
一种最常用的迭代TMap的方法是使用迭代器。TMap包含两种迭代器类型:const_iterator和iterator。其中,const_iterator仅用于读取,而iterator则可用于读取和修改。
下面是一个使用const_iterator的示例:
// 遍历TMap并输出所有学生的姓名和得分
for (TMap<FString, int32>::const_iterator It(StudentScoreMap); It; ++It)
{
FString StudentName = It.Key();
int32 Score = It.Value();
UE_LOG(LogTemp, Log, TEXT("%s: %d"), *StudentName, Score);
}
在此示例中,我们使用了一个循环,并将TMap传递给const_iterator。随着循环进行,每个键和值都存储在迭代器的Key()和Value()函数中。我们使用UE_LOG()函数将它们输出到控制台。
现在我们来看看如何使用iterator:
// 将所有学生的分数加10分
for (TMap<FString, int32>::iterator It(StudentScoreMap); It; ++It)
{
int32& Score = It.Value();
Score += 10;
}
在这个示例中,我们使用TMap的iterator,并在循环中更新了所有学生的分数。这里需要注意的是,我们将Score声明为int32&。这将让我们能够将加法运算后的新值保存回TMap中。
在UE4游戏开发中,您可能需要根据某些条件查找TMap中的元素。在这种情况下,您可以使用TMap的Find、FindByKey和FindLastByValue函数。
下面是一个使用Find函数的示例:
// 查找分数大于80的学生
for (TMap<FString, int32>::const_iterator It(StudentScoreMap); It; ++It)
{
FString StudentName = It.Key();
int32 Score = It.Value();
if (Score > 80)
{
UE_LOG(LogTemp, Log, TEXT("%s: %d"), *StudentName, Score);
}
}
在此示例中,我们使用了TMap的const_iterator,并使用if语句检查每个学生的分数是否大于80。如果分数大于80,我们就将学生姓名和分数输出到控制台。
现在让我们看一下如何从TMap中删除元素。对于删除元素,您可以使用Remove、RemoveAt和Empty函数。
以下是一个使用Remove函数的示例:
// 删除姓名为"Tom"的学生
StudentScoreMap.Remove("Tom");
在此示例中,我们使用TMap的Remove函数来删除名为Tom的学生。如果TMap中存在多个具有相同值的键,则使用Remove函数将删除第一个键。
在UE4游戏开发中,TMap是一个非常重要的数据结构,因此,了解如何迭代TMap、条件查找TMap的元素以及删除TMap的元素非常重要。希望这篇文章能对初学者起到指导作用。