728x90

백준을 통해 C++을 공부하던중 키-값을 한쌍으로 저장할 수 없을까 찾던중 STL 에서 map 컨테이너가 있어 이를 정리해보겠습니다.

 

목차

1. map 이란?
2. map 특징 및 장점
3. map 기본 형태
4. map 사용법

 

map 이란?

C++의 표준 라이브러리(STL)에서 제공되는 컨테이너중 하나인 "맵(Map)"컨테이너 입니다.

맵은 키-값(key-value)쌍으로 데이터를 저장하는 데이터 구조로, 각 키는 유일해야 하며, 키에 대응하는 값을 빠르게 찾을 수 있습니다.

 

map 특징 및 장점

1. 유니크한 키(Key)와 값(Value)의 쌍 : 맵은 각 키가 유일합니다. 같은 키를 두 번 이상 저장할 수 없으며, 그 결과 데이터를 빠르게 찾을 수 있습니다. 대량 데이터 검색에 유용하여 데이터베이스에서 인덱스와 유사한 역할을 합니다.

 

2. 자동 정렬 : 맵은 기본적으로 키를 기준으로 오름차순 정렬이 됩니다. 이러한 정렬 특성을 활용해 데이터를 쉽게 관리할 수 있습니다.

 

 

3. 트리 기반 구조 : 레드 - 블랙 트리(Red-Black Tree)로 구현되어 있어 데이터 검색에 뛰어난 성능을 제공합니다.

 

map 기본 형태

map<key,value> 변수명

* 내림차순 정렬 : map<key,value,greater> 변수명

 

map 사용법

헤더 파일

map은 <map>헤더 파일에 정의되어 있으며 std 네임스페이스에서 사용이 가능합니다

#include<map>

using namespace std;

 

선언

map<key,value> 변수명과 같은 형태로 선언이 가능하며 선언과 동시에 초기화도 가능합니다.

map<string, float> myMap //선언
map<string, float> myMap{//선언,초기화
	{"A+",4.5f},
	{"A0",4.0f},
};

 

데이터 삽입

insert함수를 사용해 데이터 삽입

  myMap.insert(make_pair("C+",2.5f)); //만약 기존 "C+"가 있다면 삽입 X
  myMap[2,"A+"] = 2.5f; //"A+"를 4.5로 초기화했지만 2.5로 값이 변경

 

데이터 접근

cout << gradeMap["A+"] <<endl; // 4.5 출력
cout << gradeMap.at("A0") <<endl; // 4.0 출력

만약 위 선언의 순서를

map<float, string> myMap{//선언,초기화
	{4.5f,"A+"},
	{4.0f,"A0"},
};

이렇게 바꾼다면

cout << gradeMap[4.5f] <<endl; // "A+" 출력
cout << gradeMap.at(4.0f) <<endl; // "A0" 출력

다음과 같이 출력

 

데이터 찾기

위 코드에서 값을 찾아서 it에 할당했다면 true

find 함수를 사용해서 map에 원하는 데이터 반환
gradeMap.end()
는 맵 끝을 가르키는 반복자로 요소 찾을때 사용

string rank;
cin >>rank;
auto it = gradeMap.find(rank); //gradeMap에서 rank를 찾고 결과를 it에 할당	

if (it != gradeMap.end())
        {
         //현재기준 second는 float 값 first는 string
         avrg += (it->second ); 
        }

 

맵 순회

  for (const auto& entry : gradeMap) {
        cout << entry.first << ": " << entry.second << endl;
    }

선언 및 초기화
순회 결과 출력

 

데이터 삭제

erase 함수를 활용해 데이터를 삭제할 수 있습니다

string keyToDelete = "B+";
auto it = gradeMap.find(keyToDelete);
gradeMap.erase(it);

 

728x90

+ Recent posts