Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- M1W
- JS
- JavaScript
- 자바스크립트
- 삼성노트북
- solved.ac
- 시간복잡도
- unityC#
- 노트북램교체
- ADT
- 추상적 자료형
- 코테
- 어도비
- 코딩공부
- 삼성노트북하판
- 긱바
- 몬스긱
- 코테준비
- 백준
- 기계식키보드
- Unity
- 오늘도코드잇
- GMK67
- 코드잇
- 브론즈
- 자료구조
- 코드잇TIL
- 스톡
- 노트북SSD교체
- LinkedList
Archives
- Today
- Total
SKYLIGHT STUDIO
[C++ 리바이브] Map 본문
Map은 C++의 연관 컨테이너( associative container) 중 하나로, 키-값 쌍(key-value pair)을 저장하고 키를 통해 값에 접근하는 자료구조 중 하나이다. 다른 연관 컨테이너로는 또 멀티맵이나 해시 테이블, unordered_map 뭐 많다.
보통 이런 종류의 자료구조는 파이썬의 딕셔너리를 통해 많이들 접하게 된다. Map도 C++에서 쓰기 편한 연관 컨테이너라는 점에서 공통점이 많긴 하나, 세부적인 차이점도 꽤 있다.
특성 | Map | Dictionary |
중복 키 | 자동 오름차순 정렬 | 정렬되지 않음. 입력 순서 |
정렬 여부 | 허용하지 않음 | 허용하지 않음 |
검색속도 | O(logn) | O(1) (해시 테이블) |
키의 타입 | 컴파일 시 지정해야 함 | 다양한 타입 |
예외 처리 | at()은 예외 발생, []은 새 항목 추가 | KeyError |
내부 구조 | 균형 이진 탐색 트리(Red-Black Tree) | 해시 테이블 |
멀티스레드 안정성 | 멀티스레드 환경에서 불안정함 | GIL로 인한 일부 제약 |
역할은 비슷하지만 기반 자체가 다르다.
기본 사용법
#include <iostream>
#incldue <map>
#include <string>
using namespace std;
int main() {
map<string, int> score;
// 요소 추가
score["Alice"] = 90;
score["Bob"] = 85;
score["Charlie"] = 95;
// 요소 접근
cout << score["Alice"] << endl;
// 순회
for (const auto& pair : score) {
cout << pair.first << ": " << pair.second << endl;
}
return 0;
}
score["Alice"] = 90;에서 Alice가 Key이고, 90이 Value인 것.
요소 순회는 C++11에서 도입된 범위 기반 for 루프(range-based for loop)을 사용하면 편리하다.
메소드
Insert()
students.insert({3, "Charlie"});
이번엔 Key가 3, Value가 Charlie. 아까 score["Alice"] = 90;와 같은 역할이다.
당연하게도 Key가 이미 존재할 경우 삽입이 무시된다.
요소 제거(erase)
students.erase(3);
패러미터로 들어온 키의 요소를 제거한다.
요소 찾기
auto it = students.find(2);
if (it != students.end()) {
cout << "Found: " << it->second << endl;
} else {
cout << "Not found" << endl;
}
find() 구문
operator[] vs at()
cout << students[2] << endl; // 키 2의 값 출력
// at()은 예외를 던지지만 [] 연산자는 새 요소를 생
cout << students.at(2) << endl; // 존재하지 않으면 예외 발생
예외처리가 필요하면 at()을 사용할 것.
'Computer Programming > Coding Test(C++)' 카테고리의 다른 글
[C++ 리바이브] 범위 기반 for 루프 (0) | 2024.11.02 |
---|---|
[C++][1773] 폭죽쇼 (1) | 2024.10.08 |
[C++/1076] 저항 (0) | 2024.10.08 |
[C++][2547] 사탕 선생 고창영 (1) | 2024.10.02 |
[C++ 리바이브] C++ 동적 배열 (0) | 2024.10.02 |