Notice
Recent Posts
Recent Comments
Link
오븐 노트
[C++] map #2 본문
#include <iostream>
using namespace std;
#include <vector>
#include <list>
#include <deque>
#include <map>
class Player
{
public:
public:
Player() : _playerId(0) { }
Player(int playerId) : _playerId(playerId) { }
public:
int _playerId;
};
template<typename T1, typename T2>
struct Pair
{
T1 t1;
T2 t2;
};
int main()
{
// 연관 컨테이너
// map : 균형 이진 트리 (AVL)
// - 노드 기반
class Node
{
public:
Node* _left;
Node* _right;
// DATA
pair<int, Player*> _data;
//int _key;
//Player* _value;
};
srand(static_cast<unsigned int>(time(nullptr)));
// (Key, Value)
map<int, int> m; // map 특성 상 같은 키의 값은 하나만 존재할 수 있음
//pair<map<int, int>::iterator, bool> ok;
//ok = m.insert(make_pair(1, 100));
//ok = m.insert(make_pair(1, 200)); // insert가 중복이면 무시된다.
//ok.first; // map<int, int>::iterator
//ok.second; // bool
// 10만명
for (int i = 0; i < 100000; i++)
{
m.insert(pair<int, int>(i, i * 100));
}
// 5만명 퇴장
for (int i = 0; i < 50000; i++)
{
int randomValue = rand() % 50000;
// Erase By Key
m.erase(randomValue);
}
// Q) ID = 1만인 Player 찾고 싶다
// A) map 자체가 삽입, 삭제 등 찾는 모든 과정이 빠르게 일어나기 때문에 매우 빠르게 찾을 수 있음.
//unsigned int count = 0;
//count = m.erase(10000);
//count = m.erase(10000); // erase는 중복 호출 하여도 문제가 되지는 않는다.
// map 순회
for (map<int, int>::iterator it = m.begin(); it != m.end(); ++it)
{
pair<const int, int>& p = (*it);
int key = it->first; // p.first / (*it).first 형태 가능
int value = it->second;
cout << key << " " << value << endl;
}
// 없으면 추가, 있으면 수정
// 기본값 세팅이 필요치 않을 때
map<int, int>::iterator findIt = m.find(10000);
if (findIt != m.end())
{
findIt->second = 200;
}
else
{
m.insert(make_pair(10000, 10000));
}
// 없으면 추가, 있으면 수정 v2 (압축 버전)
m[5] = 500;
m.clear();
// [] 연산자 사용 시 주의점
// 대입을 하지 않더라도 (Key/Value) 형태의 데이터가 추가됨.
// 기본값 세팅을 해야하거나 해도 상관 없을 때
for (int i = 0; i < 10; i++)
{
cout << m[i] << endl;
}
// 넣기 (insert, [])
// 빼기 (erase)
// 찾기 (find, [])
// 반복자 (map::iterator) (*it) pair<key, value>&
// [] 연산자는 기본값 세팅이 들어감
return 0;
}
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의
C++ 카테고리의 글은 인프런 Rookiss님의 강의를 공부하며 정리하는 내용입니다.
이미 알고 있는 내용도 다시 정리 되어있을 수 있습니다.
모든 글은 제가 공부하기 위해 작성합니다.
'Develop > C++' 카테고리의 다른 글
[C++] 연습 문제 (0) | 2023.08.31 |
---|---|
[C++] set, multimap, multiset (0) | 2023.08.23 |
[C++] map #1 (0) | 2023.07.11 |
[C++] deque (0) | 2023.06.26 |
[C++] list #3 (0) | 2023.06.09 |