Unreal Engine5/KDT 2024
[UE5 KDT2024] 6. TMap, TSet, TQueue
유잉유잉유잉
2025. 2. 18. 00:05
728x90
1. 이론
▶️ TArray
: 언리얼에서 제공하는 배열형 자료구조
- Num() : array의 갯수
- Emplace() : 요소 추가. 생성 추가.
- 성능을 위해 Add()대신 Emplace()사용을 권장한다.
- Add() : 요소 추가. 복사 해서 추가
- RemoveAt(int idx) : 해당 인덱스의 요소 제거
- Remove(요소) : 해당 요소 삭제. 중복된 값들이 있을 경우 전부 삭제.
- 반환값 : 비워진 요소 갯수 반환. 없으면 0 반환
- IsEmpty() : 배열 비었는지 확인
- Find(요소) : 요소를 찾아서 인덱스를 반환
- 중복값이 있을 경우 제일 첫번째 요소로 리턴
- 없을경우 -1 리턴
- 중복값이 있을 경우 제일 첫번째 요소로 리턴
- Contains(요소) : 포함되어 있는지 bool 값 반환
▶️TMap<Key, value>
언리얼에서 제공하는 hashMap
- 키값이 겹치면 마지막 입력값으로 덮어씌움.
- value는 겹쳐도 입력됨
- 함수는 TArray와 동일
- Find()시 value를 포인터로 반환
▶️ TSet<Value>
언리얼에서 제공하는 Set
- 동일한 값을 저장 X
- Find()시 value를 포인터로 반환
▶️ TQueue<Value>
언리얼에서 제공하는 queue
TQueue는 ThreadSafe. 스레드에서 작동해도 원자성이 보장됨
TSet이나 Tamp은 ThreadSafe하지 않음.
방식은 Lock Free -> 락을 사용하지 않는다 (원자성)
LockFree로 구현하는 큐를 Lock Free Queue라고 부르기도 함.
▶️ ThreadSafe
멀티 스레드 환경에서 안전하다는 것을 의미
구현 방법이 여러가지
- 락을 걸어서 쓰레드 세이프하거나
- 락을 안걸고, 원자성(atomic)을 보장해줌. - 스레드가 바꾸지 못하게?
2. 사용예시
▶️ TMap<key, value>
- Add( key, value )
- 복사하여 추가
- Emplace( key, value ) : 추가.
- 생성하여 추가.
- Add()보다 성능이 좋음. 큰차이는 없음.
- add와 emplace는 동일한 키가 들어올경우, 나중에 들어온 값으로 덮어씌움
- 생성하여 추가.
- Add()와 Emplace() 사용 구분 : 코드 통일하는곳도 있고, 가독성을 위해 add사용하는곳도 있다.
- Find(키값) : 해당키에 해당하는 값 리턴
- Contains(키값) : 해당키에 해당하는 값이 있는지 여부를 bool값으로 반환
- Num() : 요소 갯수 반환
▶️TSet<타입> 이름
동일한 값을 저장하지 않음. 값을 저장하는 자료구조.

emplace 진행 후, set에는 1, 2만 존재한다.
- Contains(요소) : 해당 value 보유여부 bool값 리턴
- Find( 요소 ) : 해당 요소를 찾아서 포인터로 반환. 요소가 포인터라면 이중포인터로 반환된다.
- Remove(요소) : 요소 삭제
▶️ TQueue 선입선출 자료구조
- Dequeue( 변수 ) : 해당 변수에 삭제될 요소를 가져옴. 가져온 후 삭제.

실행된 뒤 qFoundVal = 1
- Peek() : 제일 앞 (선입) 요소를 알려준다. 삭제하지 않는다.

실행 후 peekVal, peekVal2 모두 3

- Pop() : 맨앞 요소 삭제. 성공여부 bool값 리턴
- IsEmpty() : 비었는지 여부. bool 리턴
✔️ Queue 에서 중요한건
dequeue() : 가져오고 삭제 o
Peek() : 가져오고 삭제x
테스트한 코드
TArray<int32> arr;
arr.Add( 1 );
arr.Add( 3 );
arr.Add( 5 );
int32 foundVal1 = arr.Find( 1 );
int32 foundVal2 = arr.Find( 2 );
TMap<int32, FString> map;
map.Add( 1, "test" );
map.Add( 1, "test" );
map.Add( 1, "test2" );
map.Add( 2, "test3" );
map.Add( 3, "test3" );
FString* foundVal3 = map.Find( 0 );
TSet<int32> set;
set.Add( 1 );
set.Add( 1 );
set.Add( 2 );
set.Add( 3 );
int32* foundval4 = set.Find( 1 );
TQueue <int32> queue
queue.Enqueue( 1 );
int32* peekVal = queue.Peek();
int32 fff = 0;
queue.Dequeue( fff );
int b = 0;
queue.Dequeue( fff );
728x90