无名 发表于 2022-5-8 17:22:20

【冷漠搬砖】UE4随笔——TMap自定义结构体键值


在UE4中,TMap是一个比较常用的容器,TMap的用法很简单,本文将着重介绍一下TMap如何自定义结构体键值。http://cdn.u1.huluxia.com/g4/M02/F9/4F/rBAAdl8w5jyAK0iPAAAP5DPxc6c590.jpg
和众多Map容器的实现方法类似,TMap也是通过将Key转换为Hash,来建立对Value的索引,故而想要建立自定义结构体的Key,势必要确保其可顺利转换为Value。下面是UE4中TMap中关于创建Hash的相关代码:http://cdn.u1.huluxia.com/g4/M02/F9/4F/rBAAdl8w5j2AIy19AAKsKyal7Ao971.jpg
其中GetSetKey()用于设置Key的值
Matches()用于进行Key值碰撞测试GetTypeHash()用于获取Key的Hash。根据以上代码不难发现,在生成Hash的时候会会调用Key值结构体的“==”运算符来判断两个Key值是否相等,以及GetTypeHash()来产生Hash,由此我们可以得到第一种构建自定义结构体键值的方法:http://cdn.u1.huluxia.com/g4/M02/F9/4F/rBAAdl8w5j2AUnk2AAHXzWPgkbE341.jpg
该方法相当于是写了Key结构体的“==”运算符函数和GetTypeHash函数,它们均为全局函数,这样可以通过我们定义好的全局函数来生成Hash。
第二种方式就是定义自己的MapKeyFuncs来替代TDefaultMapKeyFuncs,代码如下:
http://cdn.u1.huluxia.com/g4/M02/F9/4F/rBAAdl8w5j6AAomMAAIh4PRirDE341.jpg
以上是自己在UE4的学习中总结的两种构造自定义结构体键值的方法,希望对大家能有所帮助。

和众多Map容器的实现方法类似,TMap也是通过将Key转换为Hash,来建立对Value的索引,故而想要建立自定义结构体的Key,势必要确保其可顺利转换为Value。下面是UE4中TMap中关于创建Hash的相关代码:

http://cdn.u1.huluxia.com/g4/M02/F9/4F/rBAAdl8w5j-ANKfYAALKzSriwOM072.jpg
其中GetSetKey()用于设置Key的值,Matches()用于进行Key值碰撞测试,GetTypeHash()用于获取Key的Hash。根据以上代码不难发现,在生成Hash的时候会会调用Key值结构体的“==”运算符来判断两个Key值是否相等,以及GetTypeHash()来产生Hash,由此我们可以得到第一种构建自定义结构体键值的方法:

http://cdn.u1.huluxia.com/g4/M02/F9/4F/rBAAdl8w5j-ALqh-AAHgDUcMlbE877.jpg

该方法相当于是写了Key结构体的“==”运算符函数和GetTypeHash函数,它们均为全局函数,这样可以通过我们定义好的全局函数来生成Hash。
第二种方式就是定义自己的MapKeyFuncs来替代TDefaultMapKeyFuncs,代码如下:

http://cdn.u1.huluxia.com/g4/M02/F9/4F/rBAAdl8w5kCAa0JGAAIejH14tdU111.jpg
以上是自己在UE4的学习中总结的两种构造自定义结构体键值的方法,希望对大家能有所帮助。

侵删
页: [1]
查看完整版本: 【冷漠搬砖】UE4随笔——TMap自定义结构体键值