UE C++ TMap 移除
一.Remove
1.Remove 会返回TMap里的删除元素的数量。

我们看这个源代码也能看出来,注释

本质还是嵌套了,Pairs的删除。Pairs 属于 ElementSetType类。

ElementSetType类,居然本质是TSet 让我对 TSet的学习更为期待。

测试案例:
void AWXMapActor::RemoveMap()
{TMap<int32, FString> FruitMap;FruitMap.Add(1, TEXT("Grapefruit"));FruitMap.Add(2, TEXT("Pineapple"));FruitMap.Add(3, TEXT("Pear")); //添加相同的键,会重置掉原来的FruitMap.Remove(1); //返回删除数量FruitMap.Remove(5);
}二. FindAndRemoveChecked
1.如果没有会触发断言,谨慎使用

2.源码注释,

看代码,测试代码会发现会返回的其实是值类型,这个whether 感觉用的不太好

3.代码
void AWXMapActor::FindAndCheck()
{TMap<int32, FString> FruitMap;FruitMap.Add(1, TEXT("Grapefruit"));FruitMap.Add(2, TEXT("Pineapple"));FruitMap.Add(3, TEXT("Pear")); //添加相同的键,会重置掉原来的FString Remove1 = FruitMap.FindAndRemoveChecked(1);FString Remove5 = FruitMap.FindAndRemoveChecked(5); //如果没有会报错
}三. RemoveAndCopyMap
1.赋值的是变量的引用,而不是复制的值
2.代码注释,差不多。你把引用参数,传经来。它赋值给出去。当你没找到,也不会改变原来的引用。


3.测试如下
void AWXMapActor::RemoveAndCopyMap()
{TMap<int32, FString> FruitMap;FruitMap.Add(1, TEXT("Grapefruit"));FruitMap.Add(2, TEXT("Pineapple"));FruitMap.Add(3, TEXT("Pear")); //添加相同的键,会重置掉原来的FString Removed1 = TEXT("SS"); FString Removed2 = TEXT("SH");bool Find = FruitMap.RemoveAndCopyValue(2, Removed1);bool Find2 = FruitMap.RemoveAndCopyValue(6, Removed2);int a = 1;
}
四.EmptyMap
1.清空键值,但不会清空内存,按照你参数设置

2.会保留,预期的可能的(potentially)已经分配的空间,也就是你传入的值。


3.测试代码:
Num 会被清为0,但是Max 会因为你申请的值而改变。
void AWXMapActor::EmptyMap()
{TMap<int32, FString> FruitMap;FruitMap.Add(1, TEXT("Grapefruit"));FruitMap.Add(2, TEXT("Pineapple"));FruitMap.Add(3, TEXT("Pear")); //添加相同的键,会重置掉原来的FruitMap.Empty(0);FruitMap.Empty(10);
}
五. Reset
1.清空后,会保留你之前申请的空间,即Max不会变,Num清零


2.测试代码
void AWXMapActor::ResetMap()
{TMap<int32, FString> FruitMap;FruitMap.Add(1, TEXT("Grapefruit"));FruitMap.Add(2, TEXT("Pineapple"));FruitMap.Add(3, TEXT("Pear")); //添加相同的键,会重置掉原来的FruitMap.Reset();TMap<int32, FString> FruitMap2;FruitMap.Add(1, TEXT("Grapefruit"));FruitMap.Add(2, TEXT("Pineapple"));FruitMap.Add(3, TEXT("Pear")); //添加相同的键,会重置掉原来的FruitMap.Add(5, TEXT("1Grapefruit"));FruitMap.Add(6, TEXT("2Pineapple"));FruitMap.Add(7, TEXT("3Pear")); //添加相同的键,会重置掉原来的FruitMap.Reset();int a = 1;
}