Map이란?
키-값(key-value) 쌍을 저장하는 연관 컨테이너로, 키를 사용하여 값을 빠르게 검색할 수 있는 자료구이다.
'std::map'은 레드-블랙 트리(Red-Black Tree)라는 자기 균형 이진 검색 트리를 기반을 작동한다.
이 트리는 삽입, 삭제, 검색 등의 연산을 효율적으로 수행할 수 있도록 설게되어 있다.
아래에서 'std::map'의 동작원리와 사용방법을 상세히 설명하겠다.
동작원리
- 레드-블랙 트리: 'std::map' 은 레드-블랙 트리로 구현되어 있으며, 레드-블랙 트이는 이진 검색 트리의 3한 종류로, 균형을 유지하는 트리이다. 이것은 모든 노드가 레드 또는 블랙이며, 몇가지 규칙에 따라 노드가 추가되거나 제거될 때 균형을 유지한다.
- 키-값 쌍: 'std::map'은 키와 값으로 이루어진 쌍을 저장한다. 각 키는 중복되지 않으며, 키를 통해 값에 빠르게 접근할 수 있다.
- 정렬 : 'std::map'은 키에 대한 오름차순 정렬을 제공한다. 따라서 맵의 모든 키는 정렬된 순서로 저장된다.
사용 방법
1. 헤더 파일 포함:
#include <map>
2. 'std::map' 객체 생성:
map<KeyType, ValueType> myMap;
//using namespace std
- KeyType : 키의 데이터 형식(일반적으로 숫자, 문자열 또는 사용자 정의 클래스 등)
- ValueType : 값의 데이터 형식
3.키-값 쌍 추가:
myMap[key] = value;
4. 값 검색 :
ValueType value = myMap[key];
- 'key'에 대한 값을 반환하며, 키가 없는 경우 기본값을 반환한다.
5. 키 존재 확인 :
if(myMap.find(key) != myMape.end())
{
//키 존재
}
- find() 함수를 사용하여 키의 존재 여부를 확인할 수 있다.
6. 요소 삭제:
myMap.erase(key);
- 특정 키-값 쌍을 삭제할 수 있다.
7. 맵 순회:
for(const auto&pair : myMap)
{
KeyType key = pair.first;
ValueType value = pair.second;
//키와 값에 대한 작업 수행
}
- 범위 기반 루프나 이터레이터를 사용하여 맵을 순회할 수 있다.
예제
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
map<string, int> studentScores;
// 학생의 이름과 점수를 맵에 추가
studentScores["Alice"] = 92;
studentScores["Bob"] = 85;
studentScores["Charlie"] = 78;
studentScores["David"] = 96;
// 학생 이름을 입력받고 해당 학생의 점수를 출력
string name;
cout << "학생 이름을 입력하세요: ";
cin >> name;
// 학생 이름을 키로 사용하여 맵에서 점수를 검색
if (studentScores.find(name) != studentScores.end()) {
int score = studentScores[name];
cout << name << "의 점수는 " << score << "점 입니다." << "\n";
} else {
cout << "해당 학생을 찾을 수 없습니다." << "\n";
}
return 0;
}
'std::map'을 사용하여 학생의 이름과 점수를 저장하고, 사용자에게 학생 이름을 입력받은 후 해당 학생의 점수를 출력한다.
map은 학생 이름을 키로 사용해서 맵에서 빠르게 학생의 점수를 검색하고, 만약 학생 이름이 맵에 없는 경우,
"해당 학생을 찾을 수 없습니다." 라고 출력한다.
'Algorithm' 카테고리의 다른 글
[C++] BaekJoon 1463 1로 만들기 (0) | 2023.10.26 |
---|---|
[C++] BaekJoon 10184 나이순 정렬 (0) | 2023.10.15 |
[C++] BaekJoon 10866 덱 (0) | 2023.09.26 |
[C++] BaekJoon 10773 제로 (0) | 2023.09.26 |
[C++] BaekJoon 1929 소수 구하기 (3) | 2023.09.19 |