C++ Algorithm & Study/C++ & Algorithm Strategies

[C++] 11 - 기초 문법 공부 일지(MAP)

GameChoi 2022. 12. 6. 20:05
  • map
    • 각 노드가 key와 value 쌍으로 이루어진 트리, 중복 허용X
    • first(key), second(value)가 있는 pair 객체로 저장
    • 검색, 삽입, 삭제가 레드블랙트리로 구성

1. Player Class Create

#include "pch.h"
#include <map>
#include <unordered_map>

class Player
{
public:
	Player() : id(0) {}
	Player(int id) : id(id) {}
	~Player() {}

	int GetId() { return id; }

private:
	int id = 0;
};

2. map Create

     - make_pair 함수 사용해 pair 객체로 저장 후 insert

int main()
{
	vector<Player*> player;
	for (int i = 0; i < 4; i++)
		player.push_back(new Player(i + 1));

	map<int, Player*> playerMap;
	for (auto* p : player)
		playerMap.insert(make_pair(p->GetId(), p));
}

3. 값 찾기

     - STL(Find)

     - key(first), value(second)

int main()
{
	auto it = playerMap.find(1);
	int key = it->first;
	Player* value = it->second;
}
  • hash map(unordered map)
    • map보다 더 빠른 탐색을 하기 위한 자료구조
    • 해쉬테이블로 구현한 자료구조
    • 중복된 데이터를 허용X, 데이터가 많을 시 좋은 성능을 가짐
    • key가 유사한 데이터가 많을 시 해시 충돌 발생 - 성능 하락
int main()
{
	// 메모리를 버리고 성능 선택
	unordered_map<int, int> hashMap;

	for (int i = 0; i < 4; i++)
		hashMap.insert(make_pair(i + 1, i * i));
	hashMap[1000] = 10000;

	auto it = hashMap.find(1);
	(it != hashMap.end()) ? cout << "1" << endl : cout << "0" << endl;

	int key = it->first;
	int value = it->second;
}