[자료구조] 셋 Set, 맵 Map

김정인·2021년 1월 28일
0

자료구조

목록 보기
10/12
post-custom-banner

//c++ STL. 추후 수정

📝 연관 컨테이너

[개념]

종류설명
set데이터를 키로 사용하는 연관 컨테이너 (key만 있고 value는 없는 map)
multiset키의 중복을 허락하는 set
map데이터를 키와 값 쌍으로 사용하는 연관 컨테이너
multimap키의 중복을 허락하는 map
hash_set자료를 정렬하지 않은 set
hash_map자료를 정렬하지 않은 map
hash_multiset자료를 정렬하지 않은 multiset
hash_multimap자료를 정렬하지 않은 multimap

[map 멤버 함수]

  • m.size(): m의 노드 개수를 리턴
  • m.empty(): m의 사이즈가 0인지 아닌지를 확인
  • m.begin(): m의 첫 번째 원소를 가리키는 iterator 리턴
  • m.end(): m의 마지막 원소를 가리키는 iterator 리턴
  • m[k] = v: m에 key가 k이고, value가 v인 노드 추가
  • m.insert(make_pair(k,v)): m.erase(k)
  • m에서 key가 k인 노드 삭제: m.find(k)
  • m에서 key가 k인 노드를 찾아, 해당 노드를 가리키는 iterator 리턴(key가 k인 노드가 존재하지 않는 경우, m의 마지막 원소를 가리키는 iterator 리턴)
  • m.count(k): m에서 key가 k인 노드의 개수를 리턴

[map 예시 코드]

#include <map>

map<char,int> m;
map<char,int>::iterator it;
 
m['B'] = 2;                        //m : (B,2)
m.insert(make_pair('A',1));        //m : (A,1) (B,2)
m['C'] = 3;                        //m : (A,1) (B,2) (C,3)
m.erase('A');                      //m : (B,2) (C,3)
 
//m전체를 순회하며 key와 value 출력
for(it = m.begin(); it != m.end(); it++)
    cout << it->first << ' ' << it->second << '\n';
 
if(m.find('B') != m.end()) 
    cout << "key값이 B인 노드가 존재합니다." << '\n';
else
    cout << "key값이 B인 노드가 존재하지 않습니다." << '\n';
 

[set 멤버 함수]

  • s.size(): s의 노드 개수를 리턴
  • s.empty(): s의 사이즈가 0인지 아닌지를 확인
  • s.begin(): s의 첫 번째 원소를 가리키는 iterator 리턴
  • s.end(): s의 마지막 원소를 가리키는 iterator 리턴
  • s.insert(k): s에 값이 k인 노드 추가
  • s.erase(k): s에서 값이 k인 노드 삭제
  • s.find(k): s에서 값이 k인 노드를 찾아, 해당 노드를 가리키는 iterator 리턴(값이 k인 노드가 존재하지 않는 경우, s의 마지막 원소를 가리키는 iterator 리턴)
  • s.count(k): s에서 값이 k인 노드의 개수를 리턴

[set 예시 코드]

set<int> s;
set<int>::iterator it;
 
s.insert(4);               //s : 4
s.insert(1):               //s : 1 4
s.insert(2);               //s : 1 2 4
 
vector<int> v;
v.push_back(3);            //v : 3
v.push_back(5);            //v : 3 5
v.push_back(6);            //v : 3 5 6
 
s.insert(v.begin(), v.end());        //s : 1 2 3 4 5 6
 
s.erase(4);                //s : 1 2 3 5 6
s.erase(s.begin());        //s : 2 3 5 6 
 
//지울 원소를 입력받음
int toErase;
scanf("%d", &toErase);
 
it = s.find(toErase);
 
//지울 원소가 존재하는 원소일 때만 지움
if(it != s.end())
    s.erase(it);

참고 링크

post-custom-banner

0개의 댓글