<map>, <set>

Yongs12 ㅣ 2023. 7. 10. 18:14

map 컨테이너는 레드 블랙 트리 자료구조를 기반으로 구현되어 있는 STL이다
키 : 값 의 한 쌍으로 저장되며 키는 중복되지 않고 키를 기준으로 내부적으로 정렬이 된다.
 
set은 map과 동일한 자료구조를 사용하지만 키 : 값이 아닌 고유한 값으로만 저장된다.
 

#include <iostream>
#include <map>

int main()
{
    std::map<int, int> intMap;

    // 인덱스를 직접 접근해서 값을 넣거나
    // std::make_pair를 통해 키 : 값 으로 묶어서 요소를 삽입한다.
    intMap[0] = 5;
    intMap[1] = 10;
    intMap.insert(std::make_pair(2, 10));
    
    // initializer_list 방법 모던 c++방식
    intMap.insert({3, 15});


    // 맵이 비어있는지 확인
    const bool isEmpty = intMap.empty();
    
    // 해당하는 키가 있는지 검색할 수 있다.
    // 반환은 Iterator로 반환을 하고 없을 경우 end()가 반환된다.
    std::map<int, int>::iterator intMapIter = intMap.find(1);

    if (intMapIter != intMap.end())
    {
        // end() 같지 않으면 iterator가 가르키는 키의 값은
        // second로 접근이 가능하다.
        std::cout << intMapIter->second << std::endl;
    }

    // 맵에 있는 요소의 갯수를 반환한다.
    const size_t size = intMap.size();

    // 맵에 있는 요소들을 정리한다.
    intMap.clear();


    // Iterator를 통해 순회할 수 있다.
    std::map<int, int>::iterator iter = intMap.begin();
    
    for (; iter != intMap.end(); ++iter)
    {
        // iterator 가르키는 키의 second가 값에 해당
        std::cout << iter->second << std::endl;;
    }

    // 키 값 또는 반복자를 통해 해당하는 키를 제거할 수있다.
    intMap.erase(1);
    intMap.erase(iter);
    intMap.erase(iter, intMap.end());


    return 0;
}

 
 
std::map의 내장함수 시간 복잡도, std::set도 동일

함수시간 복잡도설명
clear()O(1)모든 요소를 삭제
size()O(1)맵에 저장된 요소의 갯수를 반환
empty()O(1)맵이 비어 있는지 확인
insert()O(log n)특정 위치에 요소 삽입
erase()O(log n)특정 위치에 요소를 제거
find()O(log n)맵에서 키를 찾음

'C, C++' 카테고리의 다른 글

unique_ptr  (0) 2023.07.15
<unordered_map>, <unordered_set>  (0) 2023.07.11
<string>  (0) 2023.07.08
<array>  (0) 2023.07.07
<queue>  (0) 2023.07.06