Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Harvard
- A* Algorithm
- 언리얼
- 언리얼엔진5 #언리얼 클라이언트 프로그래밍
- Module
- UE_5
- 메테리얼
- CS
- 백준
- topdownmove
- Unreal
- 언리얼 엔진5 #언리얼 클라이언트 프로그래밍
- 브론즈
- 폭설 #미친 날씨
- 헤더 경로
- c++ 베이직
- Console
- STL
- C++
- 원카페#무인카페#카페추천#카페맛집
- Gas
- Toon Shading
- 툰쉐이딩
- 오늘밤 세계에서 이 사랑이 사라진다 해도 #독후감 #오열
- 네트워크 기초
- CS50
- 순환 리스트
- 코드리뷰
- leetcode
- build.cs
Archives
- Today
- Total
WN_인생기록
[UE_5] TSet 본문
TSet
TSet, 세트는 보통 순서가 중요치 않은 상황에서 고유 엘리먼트를 저장하는 데 사용되는 고속 컨테이너 클래스입니다.
docs.unrealengine.com
Set은 중복없는 데이터를 담을 때 주로 많이 쓰이는데
Unreal 에서는 해시 테이블 형태로 키, 데이터로 구축되어 있고
(Dynamic Array 에서 배열이 중간중간 비어있다고(해시 테이블이라서) 생각하면 됨)
C++ STL set은 이진 트리로 구성되어 있음.
구조가 다름.
TSet은 독립된 키로 데이터값을 연결하는게 아니라 데이터 값 자체를 키로 사용함.
대부분 TArray와 유사하지만, 구조 자체가 해시테이블로 구성되어 있어서 탐색에 있어서는 무척 빠름. 데이터가 클때는 TSet을 사용하는게 좋다.
해시테이블로 찾은 데이터는 FSetElementId 라는 구조체로 저장되어 있음.
FSetElementId BananaIndex = FruitSet.Index(TEXT("Banana"));
// BananaIndex is a value between 0 and (FruitSet.Num() - 1)
FPlatformMisc::LocalPrint(
*FString::Printf(
TEXT(" \"%s\"\n"),
*FruitSet[BananaIndex]
)
);
// Prints "Banana"
FSetElementId LemonIndex = FruitSet.Index(TEXT("Lemon"));
// LemonIndex is INDEX_NONE (-1)
FPlatformMisc::LocalPrint(
*FString::Printf(
TEXT(" \"%s\"\n"),
*FruitSet[LemonIndex]
)
); // Assert!
내부적으로 Remove를 할때는 중간중간 비어있는 공간이 <Invalid>라는 값으로 남아있음.
그래서 이후에 Add를 통해 데이터를 추가할때는 가장 마지막의 <Invalid> 값에 데이터를 삽입하게 됨. (내부적인 구조)
'코드 리뷰' 카테고리의 다른 글
[UE_5] TArray (0) | 2024.05.31 |
---|---|
A* Algorithm -2 (0) | 2024.03.28 |
A* Algorithm -1 (0) | 2024.03.25 |