CS/자료구조

C++ STL - Associate Container; map, set

_mwmw 2022. 8. 24. 14:06

연관 컨테이너(associate container)

연관 컨테이너 컨테이너의 종류 중 하나로 키와 값을 쌍으로 저장한다.

원소들의 위치를 정할 수 없다.

 

다음과 같은 종류가 있다.

  • 맵(map)
  • 셋(set)

 


맵(map)

맵은 키와 값으로 데이터를 관리한다. 삽입시 정렬이 되기 때문에 검색 속도가 매우 빠르다.

키는 유일하므로 하나의 키에 하나의 값만 가질 수 있다.

(단, 멀티맵(multimap)은 은 키 중복이 가능하다.)

 

코드

#include <iostream>
#include <map>

int main(){
    std::map<std::string, int> mp;
    
    mp.insert({"철수", 20});	// 원소 추가
    mp.insert({"영희", 30});
    mp["바둑이"] = 100;	// 이렇게도 가능
    
    mp.erase("철수");	// 키를 이용해 데이터 삭제
    
    mp.insert({"영희", 50});	// 같은 키로 넣으면 무시된다. (50으로 갱신x)
    mp["바둑이"] = 500;	// 이렇게 넣으면 값이 갱신된다. (500으로 갱신o)
    
    return 0;
}

 

 

셋(set)

셋은 키가 곧 값인 단순한 연관 컨테이너다.

키는 유일하므로 값도 유일하며 수학의 집합의 개념과 같다.

(단, 멀티셋(multiset)은 은 키 중복이 가능하다.)

 

코드

#include <iostream>
#include <set>

int main(){
    std::set<int> st;
    
    st.insert(5);	// 원소 추가
    st.insert(6);

    st.erase(2);	// 원소 삭제
   
    return 0;
}

 


추가

맵과 셋은 다음과 같이 생성과 동시에 초기화할 수 있다.

#include <iostream>
#include <map>
#include <set>

int main(){    
    // map
    std::map<int, int> mp1{{1, 100}, {2, 200}, {3, 300}, {4, 400}};
    
    std::map<int, int> mp2 = {{1, 100}, {2, 200}, {3, 300}, {4, 400}};
    
    std::pair<int, int> mpArr[] = { {1, 100}, {2,200} , {3, 300}, {4, 400} };
    std::map<int, int> mp3(mpArr, mpArr + 4);


    // set
    std::set<int> st1{1, 2, 3, 4};
    
    std::set<int> st2 = {1, 2, 3, 4};
    
    int stArr[] = {1, 2, 3, 4, 5, 6, 7};
    std::set<int> st3(stArr, stArr + 4);

    return 0;
}

'CS > 자료구조' 카테고리의 다른 글

C++ STL - Sequence Container; vector, deque, list, forward_list  (0) 2022.08.12
C++ STL이란?  (0) 2022.08.12