오븐 노트

[C++] set, multimap, multiset 본문

Develop/C++

[C++] set, multimap, multiset

오 븐 2023. 8. 23. 20:58
#include <iostream>
using namespace std;
#include <vector>
#include <list>
#include <deque>
#include <map>
#include <set>

// 면접의 경우 map과 set의 구조와 같은 세부 내용을 물어보기도 하고, map과 multimap의 차이점에 대해서도 물어보기도 한다.

int main()
{
    // map : (Key, Value)
    // map<int, Player*>
    set<int> s; // value가 필요없고 key만 필요로 하는 경우
    // set는 기본적으로 map과 일치하지만 key, value가 일치한다는 특징이 있다.
    // multimap : map에서 중복 키를 허용한 것
    // multiset : set에서 중복 키를 허용한 것
    // 위 두개는 자주 사용하지는 않는다.

    // 주 기능 : 넣기 빼기 찾기 순회하기

    // 넣기
    s.insert(10);
    s.insert(30);
    s.insert(20);
    s.insert(50);
    s.insert(40);
    s.insert(70);
    s.insert(60);
    s.insert(90);
    s.insert(80);
    s.insert(100);

    // 빼기
    s.erase(40);

    // 찾기
    set<int>::iterator findIt = s.find(50);
    if (findIt == s.end())
    {
        cout << "못 찾음" << endl;
    }
    else
    {
        cout << "찾음" << endl;
    }

    // 순회하기
    for (set<int>::iterator it = s.begin(); it != s.end(); ++it)
    {
        cout << (*it) << endl;
    }

    cout << "------------------------" << endl;

    multimap<int, int> mm;

    // 넣기
    mm.insert(make_pair(1, 100));
    mm.insert(make_pair(1, 200));
    mm.insert(make_pair(1, 300));
    mm.insert(make_pair(2, 400));
    mm.insert(make_pair(2, 500));

    // mm[1] = 500; <- 막혀있는 문법

    // 빼기
    //unsigned int count = mm.erase(1); // 3

    // 찾기
    /*multimap<int, int>::iterator itFind = mm.find(1);
    if (itFind != mm.end())
        mm.erase(itFind);*/

    pair<multimap<int, int> ::iterator, multimap<int, int> ::iterator> itPair;
    itPair = mm.equal_range(1);

    multimap<int, int> ::iterator itBegin = mm.lower_bound(1);
    multimap<int, int> ::iterator itEnd = mm.upper_bound(1);

    for (multimap<int, int>::iterator it = mm.begin(); it != mm.end(); ++it)
    {
        cout << it->first << " " << it->second << endl;
    }

    cout << "------------------------" << endl;

    multiset<int> ms;

    // 넣기
    ms.insert(100);
    ms.insert(100);
    ms.insert(100);
    ms.insert(200);
    ms.insert(200);

    // 찾기
    multiset<int>::iterator findIt2 = ms.find(100);

    pair<multiset<int> ::iterator, multiset<int> ::iterator> itPair2;
    itPair2 = ms.equal_range(100);

    for (multiset<int>::iterator it = itPair2.first; it != itPair2.second; ++it)
    {
        cout << *it << endl;
    }

    multiset<int> ::iterator itBegin2 = ms.lower_bound(100);
    multiset<int> ::iterator itEnd2 = ms.upper_bound(100);

    for (multiset<int>::iterator it = itBegin2; it != itEnd2; ++it)
    {
        cout << *it << endl;
    }

    return 0;
}

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의
 
C++ 카테고리의 글은 인프런 Rookiss님의 강의를 공부하며 정리하는 내용입니다.
이미 알고 있는 내용도 다시 정리 되어있을 수 있습니다.

 

모든 글은 제가 공부하기 위해 작성합니다.

'Develop > C++' 카테고리의 다른 글

[C++] algorithm  (0) 2023.09.30
[C++] 연습 문제  (0) 2023.08.31
[C++] map #2  (0) 2023.07.13
[C++] map #1  (0) 2023.07.11
[C++] deque  (0) 2023.06.26