코딩/자료구조

[자료구조] set,map

Hun die 2022. 8. 5. 17:00
set

 

#include <set> // set을 쓰기 위한 헤더
#include <iostream>
 
int main()
{
    std::set<int> s;
 
    // 삽입
    s.insert(1); // s{ 1 }
    s.insert(2); // s{ 1, 2 }
    s.insert(3); // s{ 1, 2, 3 }
   
    // 중복된 데이터는 삽입할 수 없다.
    // insert()의 반환은 pair 타입이며
    // 두 번째 데이터에 삽입 여부가 담긴다.
    if (false == s.insert(1).second)
    {
        std::cout << "이미 1을 가지고 있음.\n";
    }
 
    // 반복자
    // 다른 컨테이너와 비슷하다.
    std::set<int>::iterator iter;
    iter = begin(); // [*1][2][3][]
    iter = end();   // [1][2][3][*]
    std::set<int>::reverse_iterator riter;
    riter = rbegin(); // [][1][2][*3]
    riter = rend(); // [*][1][2][3]
 
    // 기타 연산
    // count() : 데이터가 몇 개인지 센다.
    size_t c = s.count(1); // 1을 반환한다.
    // find() : 데이터가 있는지 확인한다.
    if (s.end() == s.find(4)) // 없으면 end()다.
    {
        std::cout << "4는 없다.\n";
    }
 
    // 삭제
    s.erase(2); // s{ 1, 3 }
    s.clear(); // s{}
 
    // 크기
    if (0 == s.size())
    {
        std::cout << "s의 size는 0임\n";
    }
    if (s.empty())
    {
        std::cout << "s는 비었음\n";
    }
 
    // 비교가 가능하다.
    std::set<int> s2(s);
    if (s == s2)
    {
        std::cout << "둘이 같음\n";
    }
 
    // C++17부터는 아래와 같이 초기화가 가능하다.
    std::set s3 = { 1, 2, 3, 4 };
}

 

map
#include <map> // map을 쓰기 위한 헤더
#include <iostream>
#include <string>
 
int main()
{
    // 첫 번째 템플릿 파라미터는 키의 타입을
    // 두 번째 템플릿 파라미터는 값의 타입을 지정한다.
    std::map<std::string, int> ageMap;
 
    // 삽입
    // 첫 번째 원소는 트리에 사용되는 키고,
    // 두 번째 원소는 키에 대응되는 값이다.
    ageMap.insert({"홍길동", 23});
    ageMap.insert({"김철수", 17});
 
    // 원소 접근
    // [] 연산자로 ageMap에 있는 원소를 접근할 수 있다.
    std::cout << ageMap["홍길동"] << "\n"; // 23
    std::cout << ageMap["김철수"] << "\n"; // 17
    ageMap["홍길동"] = 25; // 이제 홍길동과 대응되는 데이터는 25다.
    ageMap["이영희"] = 19; // 새로운 데이터를 삽입할 수도 있다.
 
    // 반복자도 제공된다. 코드는 생략한다.
 
    // 기타 연산
    // set에서 제공하는 연산을 갖고 있다.
    size_t c = ageMap.count("홍길동"); // 1
    if (ageMap.end() != ageMap.find("이영희"))
    {
        std::cout << "영희와 관련된 데이터가 존재한다.\n";
    }
 
    // 삭제
    ageMap.erase("홍길동");
    ageMap.clear();
 
    // 크기
    ageMap.size(); // 0
    ageMap.empty(); // true
 
    // C++17부터는 아래처럼 초기화 할 수 있다.
    // 아래의 map의 타입은 map<string, string>이다.
    std::map tempMap = { std::pair{"Hello", "World"} };
}

 

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

[자료구조] 힙(Heap)  (0) 2022.09.05
[자료구조] 이진 검색 트리  (0) 2022.07.06
[자료구조] 그래프  (0) 2022.07.04
[자료구조] 큐(queue)  (0) 2022.07.04
[자료구조] 스택(Stack)  (0) 2022.07.04