백준을 통해 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);
'프로그래밍 > C++' 카테고리의 다른 글
[C++][알고리즘] 소인수분해 (0) | 2023.08.09 |
---|---|
[C++] 이차원 배열 동적할당 /정적할당 (0) | 2023.08.07 |
[C++] (string , vector) 반전,뒤집기 : reverse 함수 (0) | 2023.08.01 |
[C++] stringstream 사용법 : 문자열 단어로 나누기 (0) | 2023.08.01 |
[C++] 공백을 포함한 문자열 입력받기(getline) (0) | 2023.07.31 |