Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- set
- 시스템프로그래밍
- Array
- Arduino
- directx
- Algorithm
- map
- WinAPI
- C언어
- stl
- 컴퓨터 그래픽스
- 라인트레이서
- Deque
- 통계학
- 자료구조
- arduino compiler
- 수광 소자
- 아두이노 소스
- html
- 운영체제
- c++
- Stack
- Visual Micro
- 아두이노 컴파일러
- 아두이노
- vector
- LineTracer
- list
- priority_queue
- queue
Archives
- Today
- Total
Kim's Programming
STL(Standard Template Library) - Container - Set 본문
set은 키를 저장하는 이진탐색 트리 형태의 자료구조의 형태입니다. map은 키와 값을 같이 저장한다는 것과 조금 다릅니다. 데이터가 들어가면 이진탐색트리처럼 오름, 내림차순으로 정렬되며 Set은 오른차순으로 정렬됩니다. 중복값은 허락되지 않습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 | #include<set> #include<iostream> void print(std::set<int> Target_Set) { for (std::set<int>::iterator IterPos = Target_Set.begin(); IterPos != Target_Set.end(); ++IterPos) std::cout << *IterPos << " "; std::cout << std::endl; } bool function(int x) { if (x > 5) return true; return false; } void main() { std::set<int> Set;//Set is binary Search Tree std::set<int> Set_Copy; std::set<int>::iterator Iter; //insert() function insert data in set, but same value is denied std::cout << std::endl << "insert()" << std::endl;; Set.insert(8); Set.insert(3); Set.insert(1); Set.insert(3); Set.insert(6); Set.insert(3); print(Set); //begin() function return Iterator that point first data in set std::cout << std::endl << "begin()" << std::endl;; std::cout << *Set.begin() << std::endl; //cbegin() function return const Iterator that point first data in set std::cout << std::endl << "cbegin()" << std::endl; std::cout << *Set.cbegin() << std::endl; //cend() function return const Iterator that point next to last data in set std::cout << std::endl << "cbegin()" << std::endl; std::cout << *(--Set.cend()) << std::endl; //Operator 'x1 = x2 ' copy x2 to x1 std::cout << std::endl << "operator '=' " << std::endl; std::cout << " Previous Set --> "; print(Set); std::cout << " Previous Set_Copy --> "; print(Set_Copy); Set_Copy = Set; std::cout << " After Set --> "; print(Set); std::cout << " After Set_Copy --> "; print(Set_Copy); //clear() function clear all data in set std::cout << std::endl << "Clear()" << std::endl; std::cout << " Previous Set_Copy --> "; print(Set_Copy); Set_Copy.clear(); std::cout << " After Set_Copy --> "; print(Set_Copy); //count(x) function count number of 'x' and return it std::cout << std::endl << "count(3)" << std::endl; std::cout << Set.count(3) << std::endl; //crbegin() function return const Iterator that point first data in set(reverse) std::cout << std::endl << "crbegin()" << std::endl; std::cout << *Set.crbegin() << std::endl; //crbegin() function return const Iterator that point last data in set(reverse) std::cout << std::endl << "crend()" << std::endl; std::cout << *(--Set.crend()) << std::endl; //emplace(x) function insert 'x' in set std::cout << std::endl << "empalce()" << std::endl; std::cout << " Previous Set --> "; print(Set); Set.emplace(15); std::cout << " After Set --> "; print(Set); //emplace_hint(x,y) function insert 'y' at specific position Iterator 'x' points in set std::cout << std::endl << "emplace_hint()" << std::endl; std::cout << " Previous Set --> "; print(Set); Set.emplace_hint(Set.begin(),2); std::cout << " After Set --> "; print(Set); //if set is empty, empty() function return true std::cout << std::endl << "empty()" << std::endl; if (Set.empty()) std::cout << "Set is empty" << std::endl; else std::cout << "Set is not empty" << std::endl; //equal_range() function std::cout << std::endl << "equal_range()" << std::endl; std::cout << *(--Set.end()) << std::endl; //erase(x) function delete all x data in set std::cout << std::endl << "erase()" << std::endl; std::cout << " Previous Set --> "; print(Set); Set.erase(3); std::cout << " After Set --> "; print(Set); //if x in set find(x) function return end() std::set<int>::iterator Iter_Find; std::cout << std::endl << "find(2)" << std::endl; Iter_Find = Set.find(2); if (Iter_Find != Set.end()) std::cout << *Iter_Find << std::endl; else std::cout << "No Data" << std::endl; //max_size() function return set's max_size std::cout << std::endl << "max_size()" << std::endl; std::cout<<Set.max_size()<<std::endl; //rbegin() function return Iterator that point first data(reverse) std::cout << std::endl << "rbegin()" << std::endl; std::cout << *Set.rbegin() << std::endl; //rend() function return Iterator that point next to last data(reverse) std::cout << std::endl << "rend()" << std::endl; std::cout << *(--Set.rend()) << std::endl; //size() function return value that set's size std::cout << std::endl << "size()" << std::endl; std::cout << Set.size() << std::endl; //x1.swap(x2) function Swap x1 and x2 std::cout << std::endl << "swap() " << std::endl; std::cout << " Previous Set --> "; print(Set); std::cout << " Previous Set_Copy --> "; print(Set_Copy); Set.swap(Set_Copy); std::cout << " After Set --> "; print(Set); std::cout << " After Set_Copy --> "; print(Set_Copy); //lower_bound(x) function return Iterator that point minimum value bigger than x(or point equal) std::cout << std::endl << "lower_bound(8) " << std::endl; std::set<int>::iterator Iter_lb; Iter_lb = Set_Copy.lower_bound(8); std::cout << "lower_bound(8) ---> " << *Iter_lb << std::endl; //upper_bound(x) function return Iterator that point minimum value bigger than x(not equal) std::cout << std::endl << "upper_bound(8) " << std::endl; std::set<int>::iterator Iter_ub; Iter_ub = Set_Copy.upper_bound(8); std::cout << "upper_bound(8) ---> " << *Iter_ub << std::endl; //equal_range(x) function return pair, first is Set.lower_bound(), second is upper_bound(x) std::cout << std::endl << "equal_range(x) " << std::endl; std::pair<std::set<int>::iterator, std::set<int>::iterator> Pair = Set_Copy.equal_range(8); std::cout << "first = lower_bound() --> " << *Pair.first << std::endl; std::cout << "second = upper_bound() --> " << *Pair.second << std::endl; //if to compare sort [y,z) and x is same ,x.value_comp(y,z) returns true std::set<int>::value_compare Value = Set.value_comp(); std::cout << std::endl << "value_comp(y,z) " << std::endl; if (Value(3, 4)) std::cout << "Same" << std::endl; else std::cout << "Not Same" << std::endl; //if to compare sort [y,z) and x is same ,x.key_comp(y,z) returns true std::set<int>::key_compare Key=Set.key_comp(); std::cout << std::endl << "key_comp(y,z) " << std::endl; if(Key(4, 3)) std::cout << "Same" << std::endl; else std::cout << "Not Same" << std::endl; } | cs |
각 함수들의 기능에 대해 알아보겠습니다.
- insert(x)
셋 안에 데이터를 집어 넣습니다. 넣는 즉시 내림차순으로 정렬되게 됩니다. - begin()
셋 안에 첫 데이터(가장 작은 값)을 가리키는 이러레이터를 리턴합니다. - cbegin()
셋 안에 첫 데이터(가장 작은 값)을 가리키는 const 이터레이터를 리턴합니다. - cend()
셋 안에 가장 마지막 데이터 바로 다음을 가리키는 const 이터레이터를 리턴합니다. - Operator '='
x=y일때 셋 y에 있는 값들을 셋 x로 옮기고 x의 기존 값들은 삭제합니다. - clear()
셋 안에 들어있는 모든 데이터를 삭제합니다. - count(x)
셋 안에 있는 x의 갯수를 리턴합니다. - crbegin()
거꾸로 본 셋에서 가장 마지막에 있는 데이터 바로 다음을 가리키는 const 이터레이터를 리턴합니다. - crend()
거꾸로 본 셋에서 가장 마지막에 있는 데이터 바로 다음을 가리키는 이터레이터를 리턴합니다. - emplace(x)
셋 안에 x를 대입합니다. - emplace_hint(x,y)
셋안에 y값을 이터레이터 x가 가리키는 위치에 삽입합니다. - empty()
셋이 비었을 경우 true를 셋이 비지 않았을 경우엔 false를 리턴합니다. - end()
셋의 가장 마지막 바로 다음을 가리키는 이터레이터를 리턴합니다. - erase()
셋의 데이터를 삭제합니다. - find()
셋에서 데이터를 찾습니다. - max_size()
셋의 최대 사이즈를 리턴합니다. - rbegin()
거꾸로 본 셋의 가장 처음을 가리키는 이터레이터를 리턴합니다. - rend()
거꾸로 본 셋의 가장 마지막 바로 다음을 가리키는 이터레이터를 리턴합니다. - size()
셋의 사이즈를 리턴합니다. - swap()
x.swap(y) 셋 x와 셋 y의 내용을 이름빼고 완전히 바꾸어줍니다. - lower_bound(x)
셋 내에서 x보다 큰 최소값(동일 값 포함)을 가리키는 이터레이터를 리턴합니다. - upper_bound(x)
셋 내에서 x보다 큰 최소값(동일 값 제외)을 가리키는 이터레이터를 리턴합니다. - equal_range(x)
셋 내에서 lower_bound(x)를 가리키는 이터레이터를 first로 하고 upper_bound(x)를 가리키는 이더레이터는 second로 하는 pair를 리턴합
니다. - value_comp()
(위 소스 참조) Value(x,y) 의 x와 y 이 정렬된 순서 등이 현재의 셋과 같은지 비교하여 같다면 true를 아니라면 false를 리턴합니다. 위의
소스의 경우에는 a b 같은경우는 오름차순을 나타내고 b a 는 내림차순을 나타냅니다. - key_comp()
(위 소스 참조) Value(x,y) 의 x와 y 이 정렬된 순서 등이 현재의 셋과 같은지 비교하여 같다면 true를 아니라면 false를 리턴합니다. 위의
소스의 경우에는 a b 같은경우는 오름차순을 나타내고 b a 는 내림차순을 나타냅니다.
'STL - Container' 카테고리의 다른 글
STL(Standard Template Library) - Container - Map (0) | 2016.01.28 |
---|---|
STL(Standard Template Library) - Container - Priority Queue (0) | 2016.01.28 |
STL(Standard Template Library) - Container - Deque (0) | 2016.01.27 |
STL(Standard Template Library) - Container - Queue (0) | 2016.01.27 |
STL(Standard Template Library) - Container - Stack (0) | 2016.01.27 |