본문 바로가기
C++ Programming

[C++] Map 공부

by TYB 2024. 7. 6.
반응형

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은 키-값 쌍을 저장하고 키를 기준으로 정렬하는 연관 컨테이너
  • 삽입, 검색, 삭제 등의 연산을 효율적으로 수행 가능함
  • 반복자를 사용하여 요소를 순회하며 원하는 값을 찾거나 삭제 가능
  • 요소 접근 시, 키가 존재하지 않으면 기본 값으로 초기화된다! <- 주의하시고

 

 

 

 

 

 

반응형