TArray to TMap


TArray¸¦ TMapÀ¸·Î ÀúÀåÇÑ´Ù.
±¸Á¶Ã¼¸¦ TArray¿¡ ÀúÀå ÇÏ°í TMap¿¡´Â ±¸Á¶Ã¼ °ªÁßÀÇ Çϳª¸¦ Å°·Î »ç¿ëÇÏ°í °ª¿¡´Â TArray¿¡ ÀúÀåµÈ ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅ͸¦ »ç¿ë ÇÑ´Ù.

TMap

TMapÀº STLÀÇ map°ú ºñ½ÁÇÏ´Ù.
°ª ÀԷ½à Áߺ¹ °ªÀÌ µé¾î¿À¸é ¸¶Áö¸·À» µ¤¾î ¾´´Ù.
[ ] ¿¬»êÀÚ·Î °Ë»ö½Ã °ªÀÌ ¾øÀ¸¸é ÇÁ·Î±×·¥ÀÌ Å©·¡½¬ µÈ´Ù.
Find·Î °Ë»öÇÒ¶§ ¾øÀ¸¸é nullptr°¡ ¸®ÅϵȴÙ.

    TMap<FString, int> map;
    map.Add(FString(TEXT("1¹ø")), 1);
    map.Add(FString(TEXT("2¹ø")), 2);
    map.Add(FString(TEXT("3¹ø")), 3);
    map.Add(FString(TEXT("3¹ø")), 4);

    int v1 = map[FString(TEXT("3¹ø"))];   //4
    int v2 = map[FString(TEXT("2¹ø"))];   //2
    //int v3 = map[FString(TEXT("9¹ø"))];  //¾ð¸®¾ó Å©·¡½Ã
    int* v3 = map.Find(FString(TEXT("9¹ø"))); //°ªÀÌ ¾øÀ¸¸é nullptr
    int* v4 = map.Find(FString(TEXT("1¹ø"))); //1

TSet

TSet´Â STLÀÇ set¿Í ºñ½ÁÇÏ´Ù.
FindId·Î ã´Â Å°°¡ ¾øÀ¸¸é -1À» ¸®ÅÏÇÑ´Ù.

    TSet<FString> StringSet;
    StringSet.Emplace(TEXT("1¹ø"));
    StringSet.Emplace(TEXT("2¹ø"));
    StringSet.Emplace(TEXT("3¹ø"));
    StringSet.Emplace(TEXT("3¹ø"));

    int count = StringSet.Num();

    FSetElementId id1 = StringSet.FindId(TEXT("1¹ø"));  //0
    FSetElementId id2 = StringSet.FindId(TEXT("2¹ø"));  //1
    FSetElementId id3 = StringSet.FindId(TEXT("3¹ø"));  //2
    FSetElementId id4 = StringSet.FindId(TEXT("4¹ø"));  //-1

TArray To TMap

TArray·Î °Ë»öÇÏ¸é ¼øÂ÷ °Ë»öÀ» ÇØ¾ß Çϱ⠶§¹®¿¡ ±¸Á¶Ã¼ Áß¿¡ Çϳª¸¦ Å°·Î ÁöÁ¤ÇÏ°í TMap¿¡ ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅ͸¦ ÀúÀåÇÑ´Ù.

Çì´õ ÆÄÀÏ
USTRUCT()
struct FItem
{
    GENERATED_BODY()

    UPROPERTY()
    FString mID;

    UPROPERTY()
    int mPrice;

    FItem()
    {
        mID = "";
        mPrice = 100;
    }

    FItem(const FString& id, int price)
    {
        mID = id;
        mPrice = price;
    }
};

¼Ò½º ÆÄÀÏ
bool LogFItem(const FString& key, TMap<FString, FItem*>& map)
{
    FItem** ppItem = map.Find(key);
    if (ppItem)
    {
        FItem* pItem = *ppItem;
        UE_LOG(LogTemp, Warning, TEXT("%s, %d"), *pItem->mID, pItem->mPrice);
        return true;
    }
    else
    {
        UE_LOG(LogTemp, Warning, TEXT("%s Not found key"), *key);
        return false;
    }
}

void UMyGameInstance::TaarayToTMap()
{
    TArray<FItem> itemList;
    itemList.Emplace(FItem(TEXT("111"), 10));
    itemList.Emplace(FItem(TEXT("222"), 20));
    itemList.Emplace(FItem(TEXT("333"), 30));

    TMap<FString, FItem*> itemMap;

    for (auto& item : itemList)
    {
        itemMap.Add(item.mID, &item);
    }

    LogFItem("333", itemMap);
    LogFItem("222", itemMap);
    LogFItem("777", itemMap);
}

FItem ±¸Á¶Ã¼ÀÇ mID ¸â¹ö º¯¼ö¸¦ Å°·Î ÇÏ°í FItem ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅ͸¦ °ªÀ¸·Î ÀúÀåÇÑ´Ù.

    TMap<FString, FItem*> itemMap;

    for (auto& item : itemList)
    {
        itemMap.Add(item.mID, &item);
    }

mID °ªÀ» Å°·Î °Ë»öÇÑ´Ù. Å°°¡ ¾øÀ¸¸é nullptr¸¦ ¸®ÅÏÇÑ´Ù.

    FItem** ppItem = map.Find(key);
    if (ppItem)
    {
        FItem* pItem = *ppItem;
        UE_LOG(LogTemp, Warning, TEXT("%s, %d"), *pItem->mID, pItem->mPrice);
        return true;
    }