※ 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;
}
위의 글과 관련하여 추가적인 내용이나 피드백은 언제나 환영입니다 :)