14. c++ STL set

han811·2021년 4월 28일
0

c++

목록 보기
14/14
post-thumbnail
  • binary tree로 삽입되는 key들을 자동으로 오름차순으로 하여 정렬된 set 자료구조 입니다.
  • 중복된 값은 하나만 저장됩니다.
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;

void print(set<int> &s, set<int>::iterator it) {
    if (it == s.end())
        cout << "end\n";
    else
        cout << *it << '\n';
}

int main() {
    ///set 선언 및 초기화///
    set<int> s1;
    set<int> s2 = { 1,2,3,4,5 };
    set<int> s3 = { 1,1,1,1,1,2,2,2,2,2,3,3,3 };    //1,2,3 저장됨

    cout << "s1.size=" << s1.size() << '\n';    //0
    cout << "s2.size=" << s2.size() << '\n';    //5
    cout << "s3.size=" << s3.size() << '\n';    //3

    set<int, greater<int>> s4;

    ///insert///
    set<int> s;
    s.insert(1);
    s.insert(3);
    s.insert(2);

    cout << "s.size=" << s.size() << '\n';        //3

    pair<set<int>::iterator, bool> result = s.insert(4);
    cout << "result iterator=" << *result.first << '\n';    //4
    cout << "result bool=" << result.second << '\n';        //1

    auto result2 = s.insert(3);
    cout << "result2 iterator=" << *result2.first << '\n';    //3
    cout << "result2 bool=" << result2.second << '\n';        //0
    
    cout << "s.size=" << s.size() << '\n';        //4

    ///erase///
    s = { 1,2,3,4,5 };
    s.erase(s.begin());
    cout << "s.size=" << s.size() << '\n';        //4

    ///set 접근///
    //s={ 2,3,4,5 }
    auto it = s.begin();
    ++it;
    cout << "*it=" << *it << '\n';    //s[1] = 3
    it = s.erase(it);    //s={ 2,4,5 }
    cout << "*it=" << *it << '\n';    //s[1] = 4
    cout << "s.size=" << s.size() << '\n';        //3

    ///오름차순으로 저장///
    s = { 5,2,4,1,3,7,6 };

    for (auto it = s.begin(); it != s.end(); ++it)    //O(n)
        cout << *it << ' ';
    cout << '\n';

    for (auto x : s)    //O(nlogn)
        cout << x << ' ';
    cout << '\n';

    s.clear();
    
    ///find///
    s = { 7,5,3,1 };
    auto it2 = s.find(1);
    print(s, it2);    //1

    it2 = s.find(2);
    print(s, it2);    //end

    for (int i = 1; i <= 9; i++)
        cout << "s3.count(" << i << ")=" << s3.count(i) << '\n';

    return 0;
}
  • multiset 자료구조는 같은 값이 들어올 수 있는 set입니다

reference

profile
han811

0개의 댓글