Nagie's DevStory
[STL] 12. std::map 본문
728x90
std::map은 C++ 표준 라이브러리에서 제공하는 키-값(Key-Value)을 쌍으로 저장하는 연관 컨테이너다.
각 키는 유일해야 하며, 키를 기반으로 값을 검색하고 관리한다.
std::map도 std::set과 같이 내부적으로 레드-블랙 트리와 같은 자료 구조를 기반으로 구현되어 있으며,
<map> 헤더 파일에 정의되어 있다.
특징
1. 키-값을 쌍으로 저장 : 각 요소는 키와 값으로 이루어져 있으며, 특정 키에 대응하는 값을 저장한다.
2. 유일한 키 : 각 키는 유일해야 하며, 중복된 키를 허용하지 않는다.
3. 자동 정렬 : 키에 대한 자동 정렬이 기본적으로 수행된다.
4. 검색 및 삽입 연산이 빠름 : 트리 기반이기 때문에 검색 및 삽입 연산이 빠르다.
5. 반복자(iterator) 제공 : begin()과 end()를 통해 반복자를 얻을 수 있어서 반복문을 통해 접근할 수 있다.
사용법
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> guns{
{"AK-47", 2700}, {"M4", 3100}, {"SuperNova", 1050}, {"SSG-08", 1700}
};
guns.insert({"D.Eagle", 700}); //중괄호를 사용해 값을 넣음
guns.insert(std::make_pair("AUG",3100)); //make_pair를 사용해 값을 넣음
guns["USP"]; //USP 노드 생성과 동시에 0으로 초기화됨
guns["GLOCK"] = 200;
guns.erase("SuperNova");
for (const auto& g : guns) {
std::cout << g.first << "\t$" << g.second << std::endl;
}
/*
//C++ 17이후 부터 사용가능
for (const auto&[name, price] : guns) {
std::cout << name << "\t$" << price << std::endl;
}*/
}
주요 멤버 함수와 기능
멤버 함수 | 설명 | 시간 복잡도 |
begin(), end() rbegin(), rend() |
순방향 및 역방향 반복자 반환 | O(1) |
insert() |
(중복되지 않는) 새로운 원소를 삽입. 최신 C++에서는 emplace()도 사용할 수 있음 |
O(log n) |
erase() |
특정 원소를 삭제 | O(log n) |
operator [] |
특정 키에 해당하는 원소의 값을 참조로 반환. 해당 키의 원소가 없다면 새로운 원소를 기본값으로 생성 후 참조를 반환 |
O(log n) |
find() |
특정 키 값을 갖는 원소를 찾아 반복자를 반환. 원소를 찾지 못하면 end()에 해당하는 반복자를 반환한다. |
O(log n) |
clear() |
모든 원소를 삭제 | O(n) |
size() |
원소의 개수를 반환 | O(1) |
empty() |
map이 비어 있다면 true를 반환 | O(1) |
728x90
Comments