C++ 14일차

2021. 6. 30. 01:40·C++
반응형

맵(Map)이란?

키를 이용하여 내용을 찾는 방식

키와 값이 쌍으로 저장

키는 중복이 될 수 없다

C++ 맵은 자동 정렬되는 컨테이너다.(키 기준)

이진 탐색 트리 기반(오름차순)

 

ex)std::map<std::string, int> simpleScoreMap <-기본적인 맵 사용 방식

앞에 있는 string이 키(Key)며 뒤의 int가 값(value)이다.

 

위는 맵의 생성 아래는 맵의 복사생성자 형식이다.

std::pair<key,value>

두 데이터를 한 단위로 저장한다!

 

데이터를 쌍으로 넣기위해

ex) simpleScoreMap.insert(std::pair<std::string,int>("Mocha",100));

 

insert는 새 요소를 map에 삽입한다.

반복자와 bool 값을 한 쌍으로 변환

반복자는 요소를 가리키며 Bool값은 삽입 결과를 알려준다

키는 중복 삽입이 불가능한다!!(insert는 새 요소라 키 겹치면 사용 불가능)

 

operator[]

Key에 대응하는 값을 참조로 반환

map에 키가 없으면 새 요소 삽입

map에 키가 있으면 값을 덮어씀

 

요소 찾기

std::map<std::string, int>::iterator it = simpleScoreMap.find("Mocha");

반복자 it를 선언하여 simpleScoreMap에서 Mocha키를 find한 후 it는 Mocha키를 가리킨다

만약 끝까지 없으면? if(it!=simpleScoreMap.end())를 이용하여 없는 것을 확인

 

find란??? iteraotor find(const Key& key);

map에서 key를 찾으면 그에 대응하는값을 가리키는 반복자 반환

못 찾으면 end() 반환

 

void swap(map& other) //비싼 연산X

두 map의 키와 값을 서로 맞바꿈

 

void clear();

map을 비운다

 

void erase(iterator position); //반복자를 넣어 제거할 수 있지만, Key를 넣어도 가능하다

map의 요소들을 제거

 

STL 맵에 pair로 내가 생성한 클래스가 들어가는가??

정답은 아니다에 가깝다. 왜 들어가지 않냐?

STL 맵에서는 항상 정렬이 되는데 정렬이 되는건 데이터 비교가 있는 것이고

=>내가 생성한 클래스는 비교할 수가 없기때문이다.

그러면? Operator<()를 이요하여 두 키를 비교하는 함수를 작성해야한다!!

Operator<()의 위치는 클래스 안에 넣어줘야한다!!

맵에서 요소들을 정렬하는 또 다른 방법??

map을 만들 때 비교함수인 comparer를 넣을 수 있다. //다만 oop의 방식이랑은 조금 다르다.

위의 operator<방식이 더 좋지만 위 방식을 사용못하는 경우 사용!!ex)남의 구조체      가능하면 studentInfo를 바꾸는게 베스트!

맵의 장점?

std::list나 std::vector보다 탐색 속도가 빠르다. //둘은 O(N) 맵은 O(log N)

맵의 단점

자동으로 정렬 //장점이자 단점..

해쉬맵이 아니다 = O(1)이 아니다.

C++11에서 해결책이 있다

 

셋은 맵과 거의 같다!!

1.정렬되는 컨테이너

2.중복되지 않는 키를 요소로 저장 //맵은 키-값 셋은 키만 들어감

3.이진 탐색 트리 기반 (오름차순)

 

맵과 장단점이 같다.

반응형
저작자표시 (새창열림)

'C++' 카테고리의 다른 글

C++ 탬플릿 프로그래밍  (0) 2021.12.22
C++ 15일차  (0) 2021.07.01
C++ 13일차  (0) 2021.06.28
C++ 12일차  (0) 2021.06.27
C++ 11일차  (1) 2021.06.23
'C++' 카테고리의 다른 글
  • C++ 탬플릿 프로그래밍
  • C++ 15일차
  • C++ 13일차
  • C++ 12일차
숯불돼지왕갈비
숯불돼지왕갈비
  • 숯불돼지왕갈비
    게임 개발 공부기
    숯불돼지왕갈비
  • 전체
    오늘
    어제
    • 분류 전체보기 (302)
      • 학교수업 (165)
      • 취업강의 (6)
      • C++ (49)
        • 코딩 테스트 (4)
      • Unreal Engine 5 (25)
        • MMORPG 개발 (25)
      • Unreal Engine 4 (44)
        • Omak Project (3)
        • Unreal Engine 4 개발일지 (9)
        • Unreal Engine 4 (32)
      • Unity (1)
        • 개발 일지 (1)
      • 수학 (3)
        • 소프트웨어 공학용 수학 (3)
      • DirectX 11 (4)
      • 게임 디자인 패턴 (2)
      • 포트폴리오 (1)
      • 자격증 (1)
        • 정보처리기사 (0)
        • SQLD (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
숯불돼지왕갈비
C++ 14일차
상단으로

티스토리툴바