UE C++ TMap容器的 创建和遍历
一.一般分为TMap和TMultiMap
1.TMap
都是先声明,再往里面添加。
这里添加会返回,当前值的引用。可以进行操作。
FString& MyFruit = FruitMap.Add(5, TEXT("Banana"));MyFruit += TEXT("!!!!!");FruitMap.Add(2, TEXT("Grapefruit"));FruitMap.Add(7, TEXT("Pineapple"));// FruitMap == [// { Key: 5, Value: "Banana" },// { Key: 2, Value: "Grapefruit" },// { Key: 7, Value: "Pineapple" }// ]FruitMap.Add(2, TEXT("Pear")); //添加相同的键,会重置掉原来的// FruitMap == [// { Key: 5, Value: "Banana" },// { Key: 2, Value: "Pear" },// { Key: 7, Value: "Pineapple" }// ]FruitMap.Add(4); //添加键,就会添加默认的值,这里就是空串// FruitMap == [// { Key: 5, Value: "Banana" },// { Key: 2, Value: "Pear" },// { Key: 7, Value: "Pineapple" },// { Key: 4, Value: "" }// ]
也可以用Emplace
FruitMap.Emplace(3, TEXT("Orange"));
// FruitMap == [
// { Key: 5, Value: "Banana" },
// { Key: 2, Value: "Pear" },
// { Key: 7, Value: "Pineapple" },
// { Key: 4, Value: "" },
// { Key: 3, Value: "Orange" }
// ]TMap<int32, FString> FruitMap2;
FruitMap2.Emplace(4,TEXT("Kiwi"));
FruitMap2.Emplace(9, TEXT("Mellon"));
FruitMap2.Emplace(9, TEXT("Mango"));
将两个Map合并在一起
FruitMap.Append(FruitMap2);
2.TMultiMap
可以重复添加,相同的键
TMultiMap<int32, FString> FruitMultiMap;FruitMultiMap.Add(2, TEXT("Grapefruit"));FruitMultiMap.Add(2, TEXT("Pineapple"));FruitMultiMap.Add(2, TEXT("Mango"));
二.遍历
1.auto& + for循环
TMap<int32, FString> FruitMap;FruitMap.Emplace(4, TEXT("Kiwi"));FruitMap.Emplace(9, TEXT("Mellon"));FruitMap.Emplace(10, TEXT("Mango"));for (auto& Elem : FruitMap){FPlatformMisc::LocalPrint(*FString::Printf(TEXT("(%d, \"%s\")\n"),Elem.Key,*Elem.Value));}
2.TPair<>& + for循环,其实auto 出来的就师TPair
for (TPair<int32, FString>& Element : FruitMap){FString Message = FString::Printf(TEXT("(%d, \"%s\")\n"), Element.Key, *Element.Value);FPlatformMisc::LocalPrint(*Message);}
3.迭代器,TMap里的 .CreateConstIterator(),只是他的key,value要用It.key(),*It.Vlaue()方法才能拿到的。
for (auto It = FruitMap.CreateConstIterator(); It; ++It){FPlatformMisc::LocalPrint(*FString::Printf(TEXT("(%d, \"%s\")\n"),It.Key(), // same as It->Key*It.Value() // same as *It->Value));}