当前位置: 首页 > news >正文

TMap的查询

一.

1.[]是直接查询

如果没有键,就会触发断言。

2.一般会用Contains先判断,再查询

void ATMapActor::QueryMap()
{TMap<int32, FString> FruitMap;FruitMap.Add(5, TEXT("Grapefruit"));FruitMap.Add(7, TEXT("Pineapple"));FruitMap.Add(9, TEXT("Pear"));  //添加相同的键,会重置掉原来的int32 num = FruitMap.Num();bool bHas7 = FruitMap.Contains(7);bool bHas8 = FruitMap.Contains(8);FString Val7 = FruitMap[7];Val7 += TEXT("Copy");FString& Val7Ref = FruitMap[7];Val7Ref += TEXT("Ref");const FString& Val7ConstRef = FruitMap[7];if (bHas8){FString Val8 = FruitMap[8];}
}

这里用引用会,改到TMap里本身的值。直接等号是复制体,如果不想它被改动,就在引用钱买你加const。

二.Find 查找

看源码,Find一般返回的是空指针。如果不是空指针,就能访问。

void ATMapActor::FindMap()
{TMap<int32, FString> FruitMap;FruitMap.Add(5, TEXT("Grapefruit"));FruitMap.Add(7, TEXT("Pineapple"));FruitMap.Add(9, TEXT("Pear"));  //添加相同的键,会重置掉原来的FString* Ptr7 = FruitMap.Find(7);FString* Ptr8 = FruitMap.Find(8);if (FString* Ptr7Test = FruitMap.Find(7)){UE_LOG(LogTemp,Warning,TEXT("%d-%s"),7,**Ptr7Test);}}

FindOrAdd如果没有查询到,就会创建新的元素加入,返回的是引用。

FindRef,返回的是一个值副本,不会创建新的元素。如果没有就会返回默认值的副本。

void ATMapActor::FindAddMap()
{TMap<int32, FString> FruitMap;FruitMap.Add(5, TEXT("Grapefruit"));FruitMap.Add(7, TEXT("Pineapple"));FruitMap.Add(9, TEXT("Pear")); //可能会创建的新的元素,返回的是引用。FString& Ref7 = FruitMap.FindOrAdd(7);FString& Ref8 = FruitMap.FindOrAdd(8);Ref8 = TEXT("NewAdd8");FString Val7 = FruitMap.FindRef(7);Val7 += TEXT("998");
//返回的是一个值。不会创建新的元素,如果没有就构建一个临时的默认值返回,返回的是值的副本。FString Val6 = FruitMap.FindRef(6); //FString Val17 = FruitMap.FindRef(8);int a = 1;
}

FindKey,按值找key,更慢。但只找第一个。

void ATMapActor::FindKeyMap()
{TMap<int32, FString> FruitMap;FruitMap.Add(5, TEXT("Grapefruit"));FruitMap.Add(7, TEXT("Pineapple"));FruitMap.Add(9, TEXT("Pear"));//按照值去找key,更慢。且只找第一个const int32* KeyPearPtr = FruitMap.FindKey(TEXT("Pear"));const int32* KeyPineapplePtr = FruitMap.FindKey(TEXT("Pineapple"));
}

GenerateKeyArray 会将所有的键值生成数组。

GenerateValueArray 会将所有的值生成数组,都是无序的。无法一一对应。

void ATMapActor::GetAllKeysAndValueMap()
{TArray<int32> FruitKeys;TArray<FString> FruitValues;TMap<int32, FString> FruitMap;FruitMap.Add(5, TEXT("Grapefruit"));FruitMap.Add(7, TEXT("Pineapple"));FruitMap.Add(9, TEXT("Pear"));FruitMap.GenerateKeyArray(FruitKeys);FruitMap.GenerateValueArray(FruitValues);//TArray<int32> FruitKeys;//TArray<FString> FruitValues;int a = 1;
}

http://www.dtcms.com/a/540036.html

相关文章:

  • SpringCloud--Sleuth 解析
  • 【C++:继承和多态】多态加餐:面试常考——多态的常见问题11问
  • 零基础新手小白快速了解掌握服务集群与自动化运维(十五)Redis模块-哨兵集群
  • 今日Cortex-M3/M4研究总结
  • 2014吉林省赛题解 | CCUT应用OJ题解——Sign in
  • 涿州网站建设推广浙江建筑信息网站
  • 前端性能优化实战指南:从首屏加载到用户体验的全面提升
  • 【OPENGL ES 3.0 学习笔记】第十一天:glDrawArrays和glDrawElements
  • Linux入门1(2/2)
  • ubuntu24安装mysql遇到的坑----解决Mysql报错缺少libaio.so.1
  • 【星光不负 码向未来 | 万字解析:基于ArkUI声明式UI与分布式数据服务构建生产级跨设备音乐播放器】
  • UniApp 在手机端(Android)打开选择文件和文件写入
  • HarmonyOS分布式媒体播放器——跨设备音视频无缝流转
  • 【金融行业案例】基于Vaadin全栈Java框架重构内部系统,全面提升开发效率与用户体验
  • 小型网站开发要多少钱苏州专业做网站的公司哪家好
  • RocketMQ 生产环境性能调优实战:从 0 到 1 打造高可用消息队列系统
  • 脉冲按摩贴方案开发, 脉冲按摩贴MCU控制方案设计
  • 特别酷炫网站做网站有费用吗
  • DrissionPage 基于 Python 的网页自动化工具
  • Next.js vs Vue.js:2025年全栈战场,谁主沉浮?
  • DAY01笔记
  • 10-js基础(ESMAScript)
  • 一次深入排查:Spring Cloud Gateway TCP 连接复用导致 K8s 负载均衡失效
  • 基于 Vue3 及TypeScript 项目后的总结
  • Android下解决滑动冲突的常见思路是什么?
  • 建筑外观设计网站如何做一个门户网站
  • SQL多表查询完全指南-从JOIN到复杂关联的数据整合利器
  • Redis主从复制与哨兵集群
  • 电科金仓“异构多活架构”:破解浙江省人民医院集团化信创难题的密钥
  • 从零搭建群晖私有影音库:NasTool自动化追剧全流程拆解与远程访问协议优化实践