map 1, 2

CJB_ny·2022년 8월 26일
0

C++ 정리

목록 보기
69/95
post-thumbnail

연관 컨테이너

Sequence 컨테이너가 아니라 연관 컨테이너로 넘어왔다.

복사 비용이 일어날 수 있으니까 Player* 로 들고있도록 하자.

10만명 입장 -> 5만명 퇴장.

중간 삽입/삭제가 비효율적이지만 일단 예로 이렇게 해보자.

만약 아이디가 10000번인 플레이어를 찾는다 하면은

벡터에서는 한땀한땀 찾아야한다.

벡터와 리스트같은 '선형자료구조'에서는 데이터를 빠르게 찾을 수 없다는 단점이 있다.

vector, list 치명적 단점

원하는 조건에 해당하는 데이터를 빠르게 찾을 수 없다.

map : 균형 이진 트리 (AVL)

노드기반,

'균형'을 맞추는 작업이 어렵다.

데이터 넣기

pair를 통해 데이터를 넣을 수 있다.

데이터 찾기

find에 키값 넣어서 못찾으면 end() iterator반환한다.

erase 두번

같은 데이터 두번 삭제하면?

처음에 성공적으로 삭제하면 => 1

삭제할 데이터가 없다면 => 0 반환.

insert 두번

키 값은 항상 달라야하는 강제사항이 붙는다.

그래서 같은 키값넣으면 두번째로 넣는 키값 데이터 무시함.

아니면 원하는 키값을 찾아서 그곳의 데이터를 수정을 하는 방식 선택해야됨.

insert 반환 값.

43번째줄의 타입처럼 뱉어준다고 생각하면된다.

첫번째로 데이터 넣은 경우 이런식으로 반환함.

두번째로 데이터 넣은 경우 이미 같은 키값이 있기 때문에

false로 반환을 한다.

map 순회

인터페이스는 벡터, 리스트와 같지만 iterator의 내부 구조는 아예 다르다.


https://velog.io/@starkshn/CPP%EC%96%B4%EC%86%8C71tree-3

'중위 순회' 를 통해서 접근한다.


first -> key 값

second -> value 값

없으면 추가, 있으면 수정

지금 if, else로 하는게 귀찮다 싶으면은

없으면 추가, 있으면 수정 version2

'5'라는 키값이 있다면 그곳의 key값에 500을 넣겠다. 라는 뜻이다.

operator [] 주의

대입을 하지 않더라도 Key/Value 형태의 데이터가 추가된다.

무슨말??

=>

데이터를 찾기위해 '출력'만 해도 데이터가 '늘어난다'.

operator [] 문법 자체가 없으면 새로운 Key를 추가를 하고

int의 기본값은 0으로 셋팅을 해준다는 것을 알 수 있다.

그래서 진짜 있는지 없는지를 보고싶다면 find를 이용해서 찾아야 됨.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글