반응형
C++에서 std::map은 표준 라이브러리 컨테이너로, 키와 값의 쌍을 저장하며 키를 기준으로 정렬된 순서로 유지함
std::map은 빨리 찾을 수 있는 이진 탐색 트리(일반적으로 레드-블랙 트리)로 구현됨.
뭔말이냐? -> 키를 가지고 값을 찾아갈 수 있다 이거다.
std::map의 주요 특징
- 키-값 쌍: 각 요소는 고유한 키와 그 키에 대응하는 값을 가짐
- 자동 정렬: 요소들은 키를 기준으로 자동으로 정렬됨
- 빠른 검색: 이진 탐색 트리를 사용하여 O(log n)의 시간 복잡도로 검색, 삽입, 삭제가 가능함
기본 사용법
1. std::map 선언 및 초기화
#include <iostream>
#include <map>
#include <string>
int main() {
// 키: std::string, 값: int
std::map<std::string, int> tray_map;
// 요소 삽입
tray_map["good"] = 22;
tray_map["rework"] = 2;
tray_map["reject"] = 1;
// 요소 출력
for (const auto& pair : tray_map) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}
2. 요소 삽입
// 두 가지 삽입 방법
tray_map["empty"] = 30; // 방법 1: 대입 연산자 사용
tray_map.insert(std::make_pair("good2", 25)); // 방법 2: insert 함수 사용
3. 요소 접근
// 요소 접근
std::cout << "Good Tray Map count: " << tray_map["good"] << std::endl;
// 요소가 없는 키 접근 시 기본 값으로 초기화
std::cout << "Unknown Tray Map count: " << tray_map["Unknown"] << std::endl; // 새 키가 추가되고 값은 0
4. 요소 검색
// 요소 검색
auto it = tray_map.find("good");
if (it != tray_map.end()) {
std::cout << "Found Good Tray Map, count: " << it->second << std::endl;
}
else {
std::cout << "Good Tray Map not found" << std::endl;
}
5. 요소 삭제
// 요소 삭제
tray_map.erase("good2");
// 삭제 확인
if (tray_map.find("good2") == tray_map.end()) {
std::cout << "good2 successfully deleted" << std::endl;
}
6. std::map 반복자 사용
// 반복자 사용하여 요소 순회
for (auto it = tray_map.begin(); it != tray_map.end(); ++it) {
std::cout << it->first << ": " << it->second << std::endl;
}
* 전체 코드
#include <iostream>
#include <map>
#include <string>
int main() {
// 키: std::string, 값: int
std::map<std::string, int> tray_map = { {"good", 30}, {"rework", 25}, {"reject", 35} };
// 요소 삽입
tray_map["good"] = 22;
tray_map["rework"] = 2;
tray_map["reject"] = 1;
// 요소 출력
for (const auto& pair : tray_map) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
// 두 가지 삽입 방법
tray_map["empty"] = 30; // 방법 1: 대입 연산자 사용
tray_map.insert(std::make_pair("good2", 25)); // 방법 2: insert 함수 사용
// 요소 접근
std::cout << "Good Tray Map count: " << tray_map["good"] << std::endl;
// 요소가 없는 키 접근 시 기본 값으로 초기화
std::cout << "Unknown Tray Map count: " << tray_map["Unknown"] << std::endl; // 새 키가 추가되고 값은 0
// 요소 검색
auto it = tray_map.find("good");
if (it != tray_map.end()) {
std::cout << "Found Good Tray Map, count: " << it->second << std::endl;
}
else {
std::cout << "Good Tray Map not found" << std::endl;
}
// 요소 삭제
tray_map.erase("good2");
// 삭제 확인
if (tray_map.find("good2") == tray_map.end()) {
std::cout << "good2 successfully deleted" << std::endl;
}
// 반복자 사용하여 요소 순회
for (auto it = tray_map.begin(); it != tray_map.end(); ++it) {
std::cout << it->first << ": " << it->second << std::endl;
}
return 0;
}
요약
- std::map은 키-값 쌍을 저장하고 키를 기준으로 정렬하는 연관 컨테이너
- 삽입, 검색, 삭제 등의 연산을 효율적으로 수행 가능함
- 반복자를 사용하여 요소를 순회하며 원하는 값을 찾거나 삭제 가능
- 요소 접근 시, 키가 존재하지 않으면 기본 값으로 초기화된다! <- 주의하시고
반응형
'C++ Programming' 카테고리의 다른 글
[C++] DLL 로드해서 사용하기 (3) | 2024.10.23 |
---|---|
[C++] DLL 만들기(Visual Studio) (0) | 2024.10.23 |
[C++ Programming] 문자열 변환 c_str() 함수 (0) | 2024.07.06 |
[C++] Vector 공부 (0) | 2024.07.06 |
[C++ Programming] Template을 사용한 Doubly Linked List 구현 (1) | 2024.03.17 |