- 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