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)
}
댓글