TSet增删改查(UEC++个人学习笔记)

本文介绍了虚幻5中TSet容器的使用方法,包括添加、删除、查找元素,合并、排序、数组转换以及内存管理功能,如Reserve、Shrink和CompactStable等。
摘要由CSDN通过智能技术生成

TSet是一种快速容器,通常用于在排序不重要的情况下存储唯一元素
    

定义

TSet<FString>MySet;

//Tset
	//增
	MySet.Add(TEXT("Banana"));
	MySet.Add(TEXT("Grapefruit"));
	MySet.Add(TEXT("Pineapple"));
	//add和Emplace功能相同,区别是Emplace可以避免在插入集合时创建临时文件
	MySet.Emplace(TEXT("Orange"));

	
	//合并元素
	TSet<FString>MySet2;
	MySet2.Add(TEXT("zhangsan"));
	MySet2.Add(TEXT("lisi"));
	MySet2.Add(TEXT("wangwu"));

	//Append是将MySet2的值合并到MySet里面
	MySet.Append(MySet2);
	PrintSet();

	//删
	MySet.Remove(TEXT("Banana"));//会返回已删除的函数的数量,如果给定的键未包含在其中,则返回0
	MySet.Empty();//清空容器并且会释放内存
	MySet.Reset();//清空集合元素但是会保存内存

	//查
	int32 Count=MySet.Num();
	bool isFind = MySet.Contains(TEXT("Banana"));//查询是否包含特定元素,找到为真,否者为假
	FString*isFind2=MySet.Find(TEXT("Banana"));//返回的是指向元素数值的指针,如果不包含该键,则返回Null

输出

void AMyGameMode::PrintSet() 
{

	for (auto& TestSet:MySet)
	{
		GEngine->AddOnScreenDebugMessage(-1, 5.0f,FColor::Blue, FString::Printf(TEXT("%s"),*TestSet));
		UE_LOG(LogTemp, Warning, TEXT("%s"), *TestSet);
	}
}

特别

Array函数
 

//Array函数
	TArray<FString> FuritArray = MySet.Array();//返还TArray,将TSet转换为了数组,里面填充了TSet每一个元素的副本
	
	//排序
	TSet<FString>TestSet = { TEXT("a"),TEXT("aa"),TEXT("aaa"),TEXT("aaaa") };
	TestSet.Sort([](FString A, FString B) {return A.Len() > B.Len(); });

	//运算符 =
	TSet<FString>NewSet;
	NewSet = MySet;//将MySet的值赋予NewSet
	NewSet.Add("TEXT(OneOne)");

	//[]
	FSetElementId Index = NewSet.Add(TEXT("TwoTwo"));//根据FSetElementId访问集合对应元素的引用
	TestSet[Index] = TEXT("One"); 

	//Reserve
	TSet<FString>NewSet1;
	NewSet.Reserve(10);//预选分配内存,若输入的Number大于元素的个数,则会产生闲置内存(Slack)

	//Shrink
	for (int32 i= 0; i < 10; i++)
	{
		NewSet1.Add(FString::Printf(TEXT("NewSet%d"), i));
	}
	for (int32 i = 0; i < 10; i+=2)
	{
		NewSet1.Remove(FSetElementId::FromInteger(i));//删除元素产生闲置内存
	}
	NewSet1.Shrink();//删除末端的空元素

	//Compact将容器中的所有空白的元素集合到一起放到末尾,然后使用Shrink()删除
	NewSet1.CompactStable();//使用Compact()可能会改变元素之间的顺序,使用CompactStable()可以不改变顺序
	NewSet1.Shrink();

笔记总结来源于:【【虚幻5】UE5C++零基础全网全流程开发从入门到进阶教程合集(持续跟新中)】https://www.bilibili.com/video/BV1Dc411f7nx?vd_source=90cb1ac44856e5e826e2bee8aa9d8a41

UEC++增强输入可以通过UE5提供的增强输入插件来实现。该插件可以处理复杂的输入操作,并提供了一些功能,如径向死区、同时按键、上下文输入和优先级安排等。 在UEC++中实现增强输入的步骤如下: 1. 首先,确保你的UEC++项目中已经安装了增强输入插件。如果没有安装,可以在UE5的插件市场中搜索并安装该插件。 2. 在UEC++项目中,打开你的角色蓝图。 3. 在蓝图中,添加一个Input Action节点。这个节点将用于触发增强输入操作。 4. 配置Input Action节点的属性,如按键绑定、输入模式等。 5. 在蓝图中,使用增强输入插件提供的节点来处理输入操作。例如,你可以使用径向死区节点来处理摇杆输入,使用同时按键节点来处理多个按键同时按下的情况,使用上下文输入节点来根据不同的上下文切换输入操作等。 6. 根据你的需求,可以使用优先级节点来安排输入操作的优先级。 下面是一个示例UEC++蓝图,演示了如何使用增强输入插件处理输入操作: ```cpp // 在角色蓝图中添加Input Action节点,绑定按键为Jump InputAction JumpAction; // 在角色蓝图中使用增强输入插件提供的节点来处理输入操作 RadialDeadzone StickDeadzone; SimultaneousKeys SimultaneousJump; ContextualInput ContextualJump; // 配置Input Action节点的属性 JumpAction.BindKey(EKeys::SpaceBar); JumpAction.SetInputMode(EInputMode::IE_Pressed); // 使用增强输入插件提供的节点来处理输入操作 StickDeadzone.SetStickInput(StickInput); SimultaneousJump.SetKeys({EKeys::SpaceBar, EKeys::LeftShift}); ContextualJump.SetContext(Context); // 根据需求使用优先级节点安排输入操作的优先级 Priority PriorityJump; PriorityJump.SetInputs({StickDeadzone, SimultaneousJump, ContextualJump}); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值