TMap的使用

在 TArray 之后,虚幻引擎中最常用的容器是 TMap

此容器是一个关联式容器,意味着每个键均拥有一个关联值,可通过键高效地查找值对象。

存在两种映射类型:TMap 和 TMultiMap。TMap 的键为唯一。

键已存在时插入一个新的键值对将导致现有的对被替代。

TMultiMap 的键不为唯一,因此新添加的对不会替代现有的对。

("键值"指的是在一个映射或字典数据结构中,键(key)和它所对应的值(value)的组合。键用于唯一标识一个条目,而值则是与该键相关联的数据。例如,在一个用户信息的映射中,用户名可以作为键,而用户的详细信息(如邮箱、年龄等)则是值)jianzhi

  • TMap 也是值类型,支持通常的复制、赋值和析构函数运算,以及它的元素的强所有权。在映射被销毁时,它的元素都会被销毁。键和值也必须为值类型。

  • TMap 是散列容器,这意味着键类型必须支持 GetTypeHash 函数,并提供 运算符== 来比较各个键是否等值

  • TMap 也可使用任选分配器来控制内存分配行为。但不同于 TArray,这些是集合分配器,而不是 FHeapAllocator 和 TInlineAllocator 之类的标准UE4分配器。集合分配器(TSetAllocator类)定义映射应使用的散列桶数量,以及应使用哪个标准UE4分配器来存储散列和元素。

创建并填充映射

TMap<int32, FString> FruitMap;  //空TMap,此时尚未分配内存

添加元素

Add
  • 元素按插入顺序排列,但不保证这些元素在内存中实际保留此排序
  • 各个键都必定是唯一。如果尝试添加重复键,将替换原来的键值
  • Add 函数可接受不带值的键。调用此重载后的 Add 时,值将被默认构建
    FruitMap.Add(5, TEXT("Banana"));
    FruitMap.Add(2, TEXT("Grapefruit"));
    FruitMap.Add(7, TEXT("Pineapple"));
    // FruitMap == [
    //  { Key:5, Value:"Banana"     },
    //  { Key:2, Value:"Grapefruit" },
    //  { Key:7, Value:"Pineapple"  }
    // ]
    Emplace 
  • 可以代替 Add,防止插入映射时创建临时文件
  • FruitMap.Emplace(3, TEXT("Orange"));
    Append
  •  函数合并映射,将一个映射的所有元素移至另一个映射,源映射的相同键会替代目标映射中的键
TMap<int32, FString> FruitMap2;
FruitMap2.Emplace(4, TEXT("Kiwi"));
FruitMap2.Emplace(9, TEXT("Melon"));
FruitMap2.Emplace(5, TEXT("Mango"));
FruitMap.Append(FruitMap2);
// FruitMap == [
//  { Key:5, Value:"Mango"     },
//  { Key:2, Value:"Pear"      },
//  { Key:7, Value:"Pineapple" },
//  { Key:4, Value:"Kiwi"      },
//  { Key:3, Value:"Orange"    },
//  { Key:9, Value:"Melon"     }
// ]
// FruitMap2 is now empty.

迭代

范围 - for
for (auto& Elem :FruitMap)
{
    FPlatformMisc::LocalPrint( *FString::Printf(TEXT("(%d, \"%s\")\n"), Elem.Key, *Elem.Value)  );
}
// Output:
// (5, "Mango")
// (2, "Pear")
// (7, "Pineapple")
// (4, "Kiwi")
// (3, "Orange")
// (9, "Melon")
迭代器
  • CreateIterator 返回拥有读写访问权限的迭代器,
  • CreateConstIterator 返回拥有只读访问权限的迭代器
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
        ) );
}

在Vue项目中集成腾讯地图(TMap)可能会遇到“解析错误”或“无法加载”的问题,这通常是因为以下原因: 1. **依赖导入不正确**:确保你在`main.js`或其他入口文件中正确引入了TMap的库和组件。例如,你可以使用`import TMap from 'tmap';`。 2. **缺少API Key**:腾讯地图服务需要API密钥才能正常使用。在项目配置中添加有效的密钥,并确保在使用地图前设置了。 3. **CDN链接失效**:检查官方文档提供的CDN链接是否可用,有时候由于网络问题或CDN服务商的问题可能导致地图加载失败。 4. **Vue生命周期钩子问题**:在Vue实例中初始化地图可能需要正确的生命周期钩子,比如`mounted()`或`created()`。 5. **代码错误**:检查是否有语法错误、变量未定义或使用不当的地方,尤其是在动态创建地图实例时。 6. **浏览器兼容性**:确保使用的浏览器支持TMap的所有功能,有些旧版本浏览器可能不支持某些新特性。 **解决步骤**: - 检查并修复依赖引入 - 确保API Key已正确设置 - 尝试更换CDN源或等待官方更新链接 - 使用浏览器开发者工具查看是否有报错信息 - 查看官方文档的示例代码进行对照 如果你能提供具体的错误堆栈或代码片段,我可以帮你更准确地定位问题。相关问题有: 1. 如何在Vue中正确引入第三方库? 2. 腾讯地图API Key在哪里设置? 3. 如何在Vue生命周期中调用TMap的初始化方法?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值