※ CS 스터디/자료구조

7. 맵 & 셋 ( Map & Set )

J 크 2023. 8. 16. 20:29
728x90
반응형

본 게시글은  : 면접을 위한 CS 전공지식 노트 (출판사 : 길벗, 주홍철 지음) 을 참조하여 작성하였습니다. + 구글링


*비선형 자료 구조 : 일렬로 나열하지 않고 자료 순서나 관계가 복잡한 구조

 

◆  맵 (map)

- 맵은 특정 순서에 따라 키(Key)와 매핑된 값(Value)의 조합으로 형성된 자료구조

   ex) Key : 모르고리즘, SSAFY,  CS_Study, 모각공

        Value : 0, 1, 2, 3

        Map : <모르고리즘, 0>, <SSAFY, 1>, <CS_Study, 2>, <모각공, 3> 

- 레드 블랙 트리 자료구조를 기반, 삽입하면 자동 정렬

- 맵을 쓸 때는 map<자료형, 자료형> 형태로 구현

- 배열과 비슷하게 clear()함수로 맵에 있는 모든 요소 삭제 가능

- size()로 크기 반환 가능, erase()로 특정 키와 키에 매핑된 값 삭제 가능

- map은 해시 테이블을 구현할 때 쓰며 정렬을 보장하지 않는 unordered_map 과 정렬하는 map 2가지 존재

#include <iostream>
#include <map>
#include <unordered_map>
#include <string>

using namespace std;

int main()
{
	unordered_map<string, int> uoMap;
	map<string, int> oMap;

	// 이렇게 넣기도 하고,
	uoMap.insert({ "Choi", 1 });
	uoMap.insert({ "Dong", 1 });
	uoMap.insert({ "Kyu",  1 });
	
	// 요렇게도 넣는다.
	uoMap.emplace("Jake", 1);

	// 요렇게 값을 변경도 가능
	uoMap["Choi"] = 3;

	for (auto element : uoMap) {
		cout << element.first << " :: " << element.second << endl;
	}

	// 찾기
	auto search = uoMap.find("Dong");
	
	// 찾았을 경우 출력
	if (search != uoMap.end())
		cout << "found : " << search->first << " " << search->second << endl;

	// key를 활요하여 value 추가
	uoMap["Kyu"]++;
	cout << uoMap["Kyu"] << endl;

	return 0;
}

◆  셋 (Set)

- 셋(Set)은 특정 순서에 따라 고유한 요소를 저장하는 컨테이너

- 중복되는 key가 없이 값을 저장하는 자료 구조

#include <iostream>
#include <set>
#include <string>

using namespace std;

int main()
{
	set<int> set22;
	
	set22.insert(0);
	set22.insert(1);
	set22.insert(1);
	set22.insert(2);
	set22.insert(2);
	set22.insert(3);
	set22.insert(3);
	set22.insert(3);

	// 중복되는 값 없이 0, 1, 2, 3 만 차례대로 출력
	for (auto i : set22) {
		cout << i << endl;
	}

	return 0;
}

 위의 글과 관련하여 추가적인 내용이나 피드백은 언제나 환영입니다 :)