📜  ue4迭代tmap c++(1)

📅  最后修改于: 2023-12-03 14:48:08.883000             🧑  作者: Mango

UE4迭代TMap C++

在UE4中,TMap是一个非常有用的数据结构。它允许您将一个键(key)映射到一个值(value)。 TMap类似于C++中的std :: map和std :: unordered_map。但是,在UE4中,TMap是一个核心的蓝图和C++数据结构,特别是在UE4游戏开发中,这是经常使用的数据结构之一。

在这篇文章中,我们将讨论如何在UE4中使用C++迭代TMap。我们将介绍一些方法,以及如何使用这些方法来更好地管理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);
如何在C++中迭代TMap

现在让我们来看看如何在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中。

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的元素非常重要。希望这篇文章能对初学者起到指导作用。