Nagie's DevStory

[STL] 12. std::map 본문

Programming/STL

[STL] 12. std::map

Nagie 2023. 11. 25. 23:51
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