UE常用容器之TMap

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" }]
*/

//
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值