๐ฉ ์ธ๋ฆฌ์ผ ์ปจํ ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์ธ๋ฆฌ์ผ ์์ง์ด ์์ฒด ์ ์ํด ์ ๊ณตํ๋ ์๋ฃ๊ตฌ์กฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์ค์ฌ์ UCL(Unreal Container Library)๋ผ๊ณ ๋ ํจ
- ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ๋ฅผ ์์ ์ ์ผ๋ก ์ง์ํ๋ฉฐ ๋ค์ ์ค๋ธ์ ํธ ์ฒ๋ฆฌ์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋จ
- ์ธ๋ฆฌ์ผ C++์ ๋ค์ํ ์๋ฃ๊ตฌ์กฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ ๋ง๋ค์ด ์ ๊ณตํ๊ณ ์์
- ์ค์ ๊ฒ์ ์ ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ธ ๊ฐ์ง๋ฅผ ์ถ์ฒํจ ๐ TArray, TMap, TSet (T=ํ ํ๋ฆฟ)
๐ฉ C++ STL๊ณผ ์ธ๋ฆฌ์ผ ์ปจํ ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐจ์ด์
- C++ STL์ ๋ฒ์ฉ์ ์ผ๋ก ์ค๊ณ๋์ด ์๋ค.
- C++ STL์ ํ์ค์ด๊ธฐ ๋๋ฌธ์ ํธํ์ฑ์ด ๋๋ค.
- C++ STL์ ๋ง์ ๊ธฐ๋ฅ์ด ์ฎ์ฌ ์์ด ์ปดํ์ผ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆผ
- ์ธ๋ฆฌ์ผ ์ปจํ ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ธ๋ฆฌ์ผ ์์ง์ ํนํ๋์ด ์์
- ์ธ๋ฆฌ์ผ ์ปจํ ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ธ๋ฆฌ์ผ ์ค๋ธ์ ํธ ๊ตฌ์กฐ๋ฅผ ์์ ์ ์ผ๋ก ์ง์ํ๋ค.
- ์ธ๋ฆฌ์ผ ์ปจํ ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฐ๋ณ๊ณ ๊ฒ์ ์ ์์ ์ต์ ํ๋์ด ์์
โจ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ด๋ฆ๊ณผ ์ฉ๋๋ ์ ์ฌํ์ง๋ง, ๋ด๋ถ์ ์ผ๋ก ๋ค๋ฅด๊ฒ ๊ตฌํ๋์ด ์์
- vector ๐ TArray : ์ค๋ธ์ ํธ๋ฅผ ์์๋๋ก ๋ด์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ์ฉ๋๋ก ์ฌ์ฉ
- (set -> x) TSet : ์ค๋ณต๋์ง ์์ ์์๋ก ๊ตฌ์ฑ๋ ์งํฉ์ ๋ง๋๋ ์ฉ๋๋ก ์ฌ์ฉ
- (map -> x) TMap : key, value ์กฐํฉ์ ๋ ์ฝ๋๋ฅผ ๊ด๋ฆฌํ๋ ์ฉ๋๋ก ์ฌ์ฉ
๐ง 1. TArray
- ๊ฐ๋ณ๋ฐฐ์ด์ ์๋ฃ๊ตฌ์กฐ
- STL์ vector์ ๋์ ์๋ฆฌ๊ฐ ์ ์ฌํจ (๋์ผํ ๋ฐ์ดํฐ ํ์ ์ ๊ฐ๋๋ค)
- ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋๋ ์๋ฃ๊ตฌ์กฐ
- ๊ฒ์ ์ ์์์๋ ๊ฐ๋ณ ๋ฐฐ์ด ์๋ฃ๊ตฌ์กฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ๊ฒ์ด ์ข์
- ๋ฐ์ดํฐ๊ฐ ์์ฐจ์ ์ผ๋ก ๋ชจ์ฌ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ณ ์บ์ ํจ์จ์ด ๋๋ค.
- ์ปดํจํฐ ์ฌ์์ด ์ข์์ง๋ฉด์, ์บ์ ์ง์ญ์ฑ์ผ๋ก ์ธํ ์ฑ๋ฅ ํฅ์์ ๊ต์ฅํ ์ค์ํด์ง
- ์์ ๋ฐ์ดํฐ์ ์ ๊ทผ์ด ๋น ๋ฅด๊ณ , ๊ณ ์์ผ๋ก ์์๋ฅผ ์ํํ๋ ๊ฒ์ด ๊ฐ๋ฅ
- ๊ฐ๋ณ ๋ฐฐ์ด์ ๋จ์
- ๋งจ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๊ฐ๋ณ์ง๋ง, ์ค๊ฐ์ ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๋ ์์ ์ ๋น์ฉ์ด ํผ
- ๋ฐ์ดํฐ๊ฐ ๋ง์์ง์๋ก ๊ฒ์, ์ญ์ , ์์ ์์ ์ด ๋๋ฆฌ๊ธฐ ๋๋ฌธ์, ๋ง์ ์์ ๋ฐ์ดํฐ์์ ๊ฒ์ ์์ ์ด ๋น๋ฒํ๊ฒ ์ผ์ด๋๋ค๋ฉด TArray ๋์ TSet์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์
๐ ๋ฐฐ์ด์ ์์ ๋ถ๋ถ์ ํฌ์ธํฐ๋ฅผ ๋ฐ์์ค๋ ํจ์ : GetData() Iterator
๐ ๋์ ๋ฐ์ดํฐ ์ถ๊ฐ : Add/Emplace()/Append() += ์ฐ์ฐ์
- Add : ์ถ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ์์ฑํ ๋ค, ๋ณต์ฌํด์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ (๊ฐ๋ ์ฑ์ Add๊ฐ ๋์)
- Emplace() : TArray ์์ฒด์์ ๋ฐ๋ก ์์ฑ (์กฐ๊ธ ๋ ํจ์จ์ )
๐ ์ค๊ฐ์ ๋ฐ์ดํฐ ์ถ๊ฐ : Insert()
๐ ํน์ ์์น์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ : []์ฐ์ฐ์
DebugGame Editor๋ก ๋ณ๊ฒฝ ๐ ๋น๋(Ctrl + F7) ๋ฐ ๋๋ฒ๊ทธ(F5)
Watch ์ฐฝ์ value๊ฐ ์์ธํ๊ฒ ๋ค์ด์จ๋ค.
// Fill out your copyright notice in the Description page of Project Settings.
#include "MyGameInstance.h"
#include "Algo/Accumulate.h" // ํฉ๊ณ๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ
void UMyGameInstance::Init()
{
Super::Init();
const int32 ArrayNum = 10;
TArray<int32> Int32Array;
// 1-10๊น์ง ์ฝ์
for (int32 ix = 1; ix <= ArrayNum; ++ix) {
Int32Array.Add(ix);
}
// ์ง์ ์ ๊ฑฐ
Int32Array.RemoveAll(
[](int32 Val) {
return Val % 2 == 0;
}
);
// ๋ค์ ์ง์ ์ถ๊ฐ
Int32Array += {2, 4, 6, 8, 10};
TArray<int32> Int32ArrayCompare;
int32 CArray[] = { 1,3,5,7,9,2,4,6,8,10 };
Int32ArrayCompare.AddUninitialized(ArrayNum);
FMemory::Memcpy(Int32ArrayCompare.GetData(), CArray, sizeof(int32) * ArrayNum);
ensure(Int32Array == Int32ArrayCompare);
// ์ดํฉ์ ๊ตฌํ๋ ๋ฐฉ๋ฒ1
int32 Sum = 0;
for (const int32& Int32Elem : Int32Array) {
Sum += Int32Elem;
}
ensure(Sum == 55);
// ์ดํฉ์ ๊ตฌํ๋ ๋ฐฉ๋ฒ2
int32 SumByAlgo = Algo::Accumulate(Int32Array, 0);
ensure(Sum == SumByAlgo);
}
๐ง2. TSet (์ด๋นจ๋น ์ง ๊ฐ๋ณ๋ฐฐ์ด)
- ๋์ ๊ฐ๋ณ๋ฐฐ์ด์ ํํ
- ์ค๊ฐ์ค๊ฐ ๋ฐ์ดํฐ๊ฐ ๋น ์ ธ์์ ์ ์๋ค
- ํด์ ํ ์ด๋ธ๋ก ๊ตฌ์ฑ๋์ด ์์ด ๋น ๋ฅด๊ฒ ๊ฒ์ ๊ฐ๋ฅ
- ์ค๊ฐ ์ค๊ฐ์ ๋ฐ์ดํฐ ์ถ๊ฐ๋ฅผ ๋น ๋ฅด๊ฒ ํ ์ ์์
๐ STL์ set๊ณผ ์ธ๋ฆฌ์ผ TSet ๋น๊ต
- STL set์ ํน์ง
- ์ด์ง ํธ๋ฆฌ๋ก ๊ตฌ์ฑ๋์ด ์์ด ์ ๋ ฌ์ ์ง์ํจ
- ๋ฉ๋ก๋ฆฌ ๊ตฌ์ฑ์ด ํจ์จ์ ์ด์ง ์์
- ์์๊ฐ ์ญ์ ๋ ๋ ๊ท ํ์ ์ํ ์ฌ๊ตฌ์ถ์ด ์ผ์ด๋ ์ ์์
- ๋ชจ๋ ์๋ฃ๋ฅผ ์ํํ๋ ๋ฐ ์ ํฉํ์ง ์์
- ์ธ๋ฆฌ์ผ TSet์ ํน์ง
- ํด์ํ ์ด๋ธ ํํ๋ก ํค ๋ฐ์ดํฐ๊ฐ ๊ตฌ์ถ๋์ด ์์ด ๋น ๋ฅธ ๊ฒ์์ด ๊ฐ๋ฅํจ
- ๋์ ๋ฐฐ์ด์ ํํ๋ก ๋ฐ์ดํฐ๊ฐ ๋ชจ์ฌ์์
- ๋ฐ์ดํฐ๋ ๋น ๋ฅด๊ฒ ์ํํ ์ ์์
- ๋ฐ์ดํฐ๋ ์ญ์ ํด๋ ์ฌ๊ตฌ์ถ์ด ์ผ์ด๋์ง ์์
- ์๋ฃ์์ ๋น์ด์๋ ๋ฐ์ดํฐ๊ฐ ์์ ์ ์์
๐ ๋ฐ๋ผ์ STL set๊ณผ ์ธ๋ฆฌ์ผ TSet์ ํ์ฉ ๋ฐฉ๋ฒ์ ๋ค๋ฅด๋ค.
๐ STL์ unordered_set๊ณผ ์ ์ฌํ๊ฒ ๋์ํ์ง๋ง ๋์ผํ์ง ์์
๐ TSet์ ์ค๋ณต ์๋ ๋ฐ์ดํฐ ์งํฉ์ ๊ตฌ์ถํ๋๋ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์
์ค๊ฐ์ค๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋ฉด์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฌ๋ผ์ง๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฐจ๋ก๋๋ก ๊ฑฐ๊พธ๋ก ์ฑ์์ง๋ค.
TSet ์์
// TSet
TSet<int32> Int32Set;
for (int32 ix = 1; ix <= ArrayNum; ++ix) {
Int32Set.Add(ix);
}
Int32Set.Remove(2);
Int32Set.Remove(4);
Int32Set.Remove(6);
Int32Set.Remove(8);
Int32Set.Remove(10);
Int32Set.Add(2);
Int32Set.Add(4);
Int32Set.Add(6);
Int32Set.Add(8);
Int32Set.Add(10);
๐ฉ ์๋ฃ๊ตฌ์กฐ์ ์๊ฐ๋ณต์ก๋
TArray | TSet | |
์ ๊ทผ | O(1) | O(1) |
๊ฒ์ | O(N) | O(1) |
์ฝ์ | O(N) | O(1) |
์ญ์ | O(N) | O(1) |
TArray
๋นํ์๋ ๋ฉ๋ชจ๋ฆฌ, ๊ฐ์ฅ ๋์ ์ ๊ทผ์ฑ๋ฅ, ๊ฐ์ฅ ๋์ ์ํ์ฑ๋ฅ
TSet
๋น ๋ฅธ ์ค๋ณต ๊ฐ์ง
'โ๏ธ ์์ง > ๐ซ ์ธ๋ฆฌ์ผ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Unreal] ์ธ๋ฆฌ์ผ ์์ง์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ (0) | 2024.05.05 |
---|---|
[Unreal] ์ธ๋ฆฌ์ผ ์ปจํ ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ2 - ๊ตฌ์กฐ์ฒด์ TMap (0) | 2024.05.04 |
[Unreal] ๋ธ๋ฆฌ๊ฒ์ดํธ (0) | 2024.05.04 |
[Unreal] ์ปดํฌ์ง์ (0) | 2024.05.03 |
[Unreal] ์ธํฐํ์ด์ค (0) | 2024.05.03 |