본문 바로가기
알고리즘/정리

map 정리

by hyerann 2020. 3. 19.

map

  • key와 value가 pair 객체 형태로 저장
  • key는 고유한 값이므로 중복이 불가능 /// 중복 key는 multimap에서 가능
  • 삽입 시 자동으로 정렬(default: 오름차순)
  • 노드 기반으로 이루어진 균형 이진 트리 구조
  • 저장 공간 동적 할당

헤더파일

#include <map>

생성자

map<key 자료형, value 자료형> 변수명;

map<int, string> students;
map<int, string> students(pred);    // 정렬기준(less<>, greater<>) 디폴트는 less<>
map<int, string> students2(students1);    // students1을 복사한 students2 생성

연산자

  • ==, !=, <, >, <=, >= 사용 가능
  • students[1] = 김철수; 로 추가/수정 가능

멤버함수

  • m,begin(); 첫번째 원소를 가리키는 반복자 리턴
  • m.end(); 원소의 끝(마지막 원소의 다음)을 가리키는 반복자 리턴
  • m.clear(); 모든 원소 제거
  • m.count(k); 원소 k의 개수 (중복을 허용하지 않으므로 무조건 0 또는 1)
  • m.empty(); map이 비어있는지 확인
  • m.erase(iter); 해당 반복자가 가리키는 원소 제거
  • m.find(k); 원소 k를 가리키는 반복자 반환. k가 없다면 m.end() 반환
  • m2.swap(m1); m1과 m2 바꿈
  • m.upper_bound(k); 원소 k가 끝나는 구간의 반복자 리턴
  • m.lower_bound(k); 원소 k가 시작하는 구간의 반복자 리턴
  • m.equal_range(k); 원소 k가 시작하는 구간과 끝나는 구간의 반복자 pair 객체 리턴
  • m.size(); 원소의 개수 리턴
  • (... )잘 사용하지 않는 함수 생략

예시코드

#include <iostream>
#include <map>
using namespace std;

int main() {
    map<int, string> students;

    // 원소 삽입하기
    students.insert(pair<int, string>(1, "김철수"));
    students.insert({2, "박영희"});
    students[3] = "이유진";    // 없으면 삽입, 있으면 수정

    // 삽입 성공 여부 확인(second)
    cout << students.insert({3, "이유진"}).second; // 실패 -> 0(false)
    cout << students.insert({4, "최민준"}).second; // 성공 -> 1(true)


    // 원소 순회하기
    for(auto it = students.begin(); it != students.end(); it++) {
        cout << it->first << ':' << it->second << '\n';
        // 1: 김철수
        // 2: 김영희
        // 3: 이유진
    }

    // key로 value 구하기
    cout << students[1];    // 김철수

    // 해당 key 존재하는지 확인
    if(students.find(1) != students.end()) {
        // 찾음
    }
    if(students.find(1) == students.end()) {
        // 못찾음
    }

    // 원소 개수 구하기
    cout << students.size();    // 2

    // 원소 모두 삭제
    students.clear();

    // 컨테이너가 비었는지 확인
    cout << students.empty();   // 1(true), 0(false)

}

댓글