TMap 是虚幻C++中的散列容器,主要由一个键类型和一个值类型,以关联对TPair<KeyType, ValueType>的形式存储在映射中。键类型必须支持 GetTypeHash 函数,并提供运算符 == 来比较各个键是否等值。TMap 也可使用任选分配器来控制内存分配行为。
示例代码如下:
//=========================================================================================//初始化
TMap<int32, FString> FoodMap; //空
//=========================================================================================
//使用结构体当作Key
// 声明结构体,定义操作符 == 和函数 GetTypeHash。
USTRUCT(BlueprintType)
struct FMyStruct
{
GENERATED_USTRUCT_BODY()
EMyEnum EnumA;
EMyEnum EnumB;
friend inline bool operator==(const FMyStruct& A, const FMyStruct& B)
{
return A.EnumA == B.EnumA && A.EnumB == B.EnumB;
}
friend inline uint32 GetTypeHash(const FMyStruct& C)
{
uint32 Hash = 0;
Hash = HashCombine(Hash, GetTypeHash(C.EnumA));
Hash = HashCombine(Hash, GetTypeHash(C.EnumB));
return Hash;
}
};
// 使用 FMyStruct 当 Key。但是不支持蓝图了。
TMap<FMyStruct, FString> MyMap;
//========================================================================================
//增
TMap<int32, FString> FoodMapA;
// 使用 Add 或 Emplace 添加元素
// 与 TArray 类似,Emplace 可以避免创建不必要的临时变量,效率比 Add 高。
// 各个键都必定是唯一。
// 如果尝试添加重复键,将替换原来的键值。
FoodMapA.Add(3, TEXT("Banana"));
FoodMapA.Add(6, TEXT("Apple"));
/** 当前TMap为:
* FoodMapA == [
* { Key:3, Value:"Banana"},
* { Key:6, Value:"Apple" }]
*/
FoodMapA.Add(3, TEXT("Orange"));
FoodMapA.Emplace(7, TEXT("Cake"));
/** 当前TMap为:
* FoodMapA == [
* { Key:3, Value:"Orange"},
* { Key:6, Value:"Apple" },
* { Key:7, Value:"Cake" }]
*/
//


3025

被折叠的 条评论
为什么被折叠?



