Sequence 컨테이너가 아니라 연관 컨테이너로 넘어왔다.
복사 비용이 일어날 수 있으니까 Player* 로 들고있도록 하자.
10만명 입장 -> 5만명 퇴장.
중간 삽입/삭제가 비효율적이지만 일단 예로 이렇게 해보자.
만약 아이디가 10000번인 플레이어를 찾는다 하면은
벡터에서는 한땀한땀 찾아야한다.
벡터와 리스트같은 '선형자료구조'에서는 데이터를 빠르게 찾을 수 없다는 단점이 있다.
원하는 조건에 해당하는 데이터를 빠르게 찾을 수 없다.
노드기반,
'균형'을 맞추는 작업이 어렵다.
pair를 통해 데이터를 넣을 수 있다.
find에 키값 넣어서 못찾으면 end() iterator반환한다.
같은 데이터 두번 삭제하면?
처음에 성공적으로 삭제하면 => 1
삭제할 데이터가 없다면 => 0 반환.
키 값은 항상 달라야하는 강제사항이 붙는다.
그래서 같은 키값넣으면 두번째로 넣는 키값 데이터 무시함.
아니면 원하는 키값을 찾아서 그곳의 데이터를 수정을 하는 방식 선택해야됨.
43번째줄의 타입처럼 뱉어준다고 생각하면된다.
첫번째로 데이터 넣은 경우 이런식으로 반환함.
두번째로 데이터 넣은 경우 이미 같은 키값이 있기 때문에
false로 반환을 한다.
인터페이스는 벡터, 리스트와 같지만 iterator의 내부 구조는 아예 다르다.
https://velog.io/@starkshn/CPP%EC%96%B4%EC%86%8C71tree-3
'중위 순회' 를 통해서 접근한다.
first -> key 값
second -> value 값
지금 if, else로 하는게 귀찮다 싶으면은
'5'라는 키값이 있다면 그곳의 key값에 500을 넣겠다. 라는 뜻이다.
대입을 하지 않더라도 Key/Value 형태의 데이터가 추가된다.
무슨말??
=>
데이터를 찾기위해 '출력'만 해도 데이터가 '늘어난다'.
operator [] 문법 자체가 없으면 새로운 Key를 추가를 하고
int의 기본값은 0으로 셋팅을 해준다는 것을 알 수 있다.
그래서 진짜 있는지 없는지를 보고싶다면 find를 이용해서 찾아야 됨.