STL <map>

나는컴공생·2025년 3월 7일

SW검정준비

목록 보기
2/11
#include <iostream>
#include <map>
#include <unordered_map>
using namespace std;

int main() {
	map<int, int> m;
	m.insert({ 1, 100 });
	//생성자
	m.emplace(2, 200);
	m.emplace(4, 400);
	m.emplace(3, 200);
	m.insert({ 3, 400 }); //첫번째 들어온 key가 존재하면, 두번째 value는 무시가 된다.
	m.emplace(5, 200);

	for (auto t : m) {
		printf("(%d, %d)", t.first, t.second);
	}puts(" ");

	m[2] = 1000; //key값 지정해주고 value를 넣게 되면 update된다.
	//key 존재 -> update 형태, key 존재 x -> insert 형태
	int tmp = m[2];
	printf("존재하는 key값 저장한 변수 : %d\n", tmp);
	tmp = m[1000];
	printf("존재하지 않는 key값 저장한 변수 : %d\n", tmp);
	//실제 값 읽을 때, key 던졌을 때 존재하지 않으면 기본 자료형 값으로 만들어서 던져줌.
	if (m.find(200) != m.end()) { //find : map(O(log N)) vs unordered_map( O(1))
		tmp = m[200];
	}
	int key = 2;
	m.erase(key);
	for (auto t : m) {
		printf("(%d, %d)", t.first, t.second);
	}puts(" ");
	//set에서 erase에 iterator 주면, find가 존재하지 않으면 end() 반환해서 오류나는데
	//set에서 erase에 값을 주면, 오류 안나고 아무일도 안남. 
	//map에서도 key "값"을 주면, 오류 안나고 아무일도 안나.ㅁ
	//key값 중복 불허
	//내부구조: hash 
	//map: (key ,value) => pair (key값은 중복 불허)
	//key -> set, 키를 기반으로 오름차순 정렬, find -> O(logN)
	
	//unordered_map : 순수 hash (pro 시험에서 자주 사용)
	//key => unordered_set, find -> O(1)
	//비정렬 상태 유지
	
}

0개의 댓글