[C++] set & multiset

2023. 7. 9. 15:09Algorithm/with C++

 

STL 셋, 집합, set 사용법 [C++]

set를 알아보자 set란 Sets are containers that store unique elements following a specific order. ++기본적으로는 오름차순으로 정렬된다. 집합과 같다. 같은 원소는 존재하지 않고 정렬되어있는 컨테이너를 말한다.

luv-n-interest.tistory.com

 

1. set

 

std::mapstd::set은 둘 다 C++의 Standard Template Library (STL)에 속하는 컨테이너입니다.

 

그러나 각각이 사용되는 목적과 저장하는 데이터의 형태가 다릅니다.

 

  • std::map
  • : std::map은 키-값 쌍을 저장하는 연관 컨테이너입니다.
    : 각각의 원소는 키와 값의 쌍으로 구성되며, 이 컨테이너는 키를 기반으로 원소를 탐색하거나 접근합니다.
    : std::map은 연관 배열 또는 사전과 같은 역할을 합니다.
  • std::set
    : std::set은 단일 값(또는 키)만을 저장하며, 이 값들은 고유합니다.
    : 고유한 원소의 집합을 관리하는 데 사용됩니다.

 

따라서 이 두 컨테이너의 사용 예시:

  • std::map은 키를 사용하여 특정 값을 빠르게 찾아야 하는 경우에 유용합니다. 예를 들어, 사람들의 이름을 키로 사용하고, 그들의 전화번호를 값으로 사용하여 전화번호부를 만들 수 있습니다.
  • std::set은 특정 원소의 유무를 빠르게 확인해야 하는 경우에 유용합니다. 예를 들어, 고유한 ID를 가진 사용자의 집합을 관리하는 경우에 사용될 수 있습니다.

 

set의 저장된 데이터는 자동적으로 정렬됩니다.

 

출처 : chatgpt-4.0

 

#include<iostream>
#include<set>
using namespace std;

int main(){
    set<pair<string, int>> st;
    st.insert({"test", 1});
    st.insert({"test", 1});
    st.insert({"test", 1});
    cout << st.size() << '\n';
    for(auto i : st){
        cout << i.first << i.second << '\n';
    }

/*
1
test1
*/
  • #include<set> : 헤더파일 참조.
  • st.insert({"test", 1}); : 삽입.
  • 중복되는 요소는 삭제됨.

 

...
    set<int> st2;
    st2.insert(1);
    st2.insert(1);
    st2.insert(2);
    cout << st2.size() << '\n';
    for(auto i : st2){
        cout << i << '\n';
    }

/*
2
1
2
*/
...
    set<char> st3;
    st3.insert('a');
    st3.insert('b');
    st3.insert('b');
    cout << st3.size() << '\n';
    for(auto i : st3){
        cout << i << '\n';
    }

    return 0;
}

/*
2
a
b
*/

 


2. multiset

#include<iostream>
#include<set>
using namespace std;

int main(){
    multiset<pair<string, int>> ms;
    ms.insert({"test", 1});
    ms.insert({"test", 1});
    ms.insert({"test", 1});
    cout << ms.size() << '\n';
    for(auto i : ms){
        cout << i.first << i.second << '\n';
    }

    multiset<int> ms2;
    ms2.insert(1);
    ms2.insert(1);
    ms2.insert(2);
    cout << ms2.size() << '\n';
    for(auto i : ms2){
        cout << i << '\n';
    }

    multiset<char> ms3;
    ms3.insert('a');
    ms3.insert('b');
    ms3.insert('b');
    cout << ms3.size() << '\n';
    for(auto i : ms3){
        cout << i << '\n';
    }

    return 0;
}
/*
3
test1
test1
test1
3
1
1
2
3
a
b
b
*/
  • #include<set> : set과 동일한 헤더파일을 공유.

 

정렬은 한다. 단 중복을 허용한다.


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

[C++] struct 구조체  (0) 2023.07.09
[C++] stack & queue & deque & priority_queue  (0) 2023.07.09
[C++] map & unordered_map  (0) 2023.07.09
[C++] 자료구조 시간복잡도 정리  (0) 2023.07.09
[C++] Linked list  (0) 2023.07.09