연관 컨테이너-셋(set)
- 프로그래밍/STL
- 2011. 4. 29. 11:04
들어가기전에 반드시 봐야되는 부분
[프로그래밍/STL] - 일반화 프로그래밍, STL기초
[프로그래밍/STL] - 컨테이너 (시퀀스,연관,어댑터)
!
Iterators:
Capacity:
Modifiers:
Observers:
Operations:
Allocator:
출저: http://www.cplusplus.com/reference/stl/set/
2)erase() 와 remove()의 차이
원소를 지우기위해 erase()를 쓴다. remove()를 쓰지않는다.( remove는 list에서만 사용 )
더 자세한 내용은 h2ostudio.egloos.com/4343561
3)시퀀스 컨테이너와 연관컨테이너의 erase()의 차이
시퀀스 컨테이너는 erase()를 하면 iterator를 반환하지만 연관컨테이너는 반환값이 void 이다.
이유는 성능때문이다. 연관 컨테이너는 바이너리 트리처럼 구현되어있기떄문에 성공 여부를 반환하는데 시간이 걸리기때문에 무시.
정리 참조
1. www.winapi.com
2. C++ standard Library 책
[프로그래밍/STL] - 일반화 프로그래밍, STL기초
[프로그래밍/STL] - 컨테이너 (시퀀스,연관,어댑터)
<셋>
0. 연관 컨테이너이므로 원소들이 정렬되어 들어간다.
0. 연관 컨테이너이므로 원소들이 정렬되어 들어간다.
1. #include <set> 을 추가하여야함.
2. namespace std에 정의되어있다.
2. namespace std에 정의되어있다.
2. 원소를 하나를 가지는 연관컨테이너
3. 셋은 키의 중복을 허용하지 않는다.
4. 멀티셋은 키의 중복을 허용함.
5. 양방향 반복자를 사용함
6. 기본적으로 insert로 삽입하고, erase로 삭제, find로 검색
6. 기본적으로 insert로 삽입하고, erase로 삭제, find로 검색
*정렬관련
1)기본적으로 정렬은 less<> (미리정의된 함수객체)오름차순을 사용함.
( 그러므로 set에 들어가는 원소타입은 반드시 < operator 가 정의되어있어야함 )
2) =, !=, <, >, <=, >= 같은것이 셋,맵에 기본으로 정의 되어있다.
이런 비교동작은 오직 같은 타입의 컨테이너에 대해서만 제공된다.!!
*내부구현
기본적으로 이진트리도 구현되어있다.( 탐색이 용이 하도록 )
이진트리로 구현되있으므로, 검색은 용이하나 값의 수정이 불가능하다.( 수정을 하려면 지워주고 넣는식으로 해야함 )
*특별한 검색 함수들을 제공
set과 map은 검색을 용이하도록 만든 컨테이너이다.
그러므로 특별한 검색 함수들을 제공한다.
count(요소) : 요소의 값을 가지는 원소의 개수를 반환한다.
find(요소) : 요소의 값을 가지는 첫 번째 원소의 위치를 반환한다. 존재하지 않으면 end() 반환
lower_bound(요소) : 요소의 값보다 크거나 같은 값을 가지는 원소의 위치를 반환함.
upper_bound(요소) : 요소의 값보다 큰 값을 가지는 운소의 위치를 반환함
equal_range(요소) : 정렬된 상태를 깨트리지 않고 요소가 삽입될 수 있는 첫 번째 위치와 마지막 위치를 반환.
Member functions
(constructor) | Construct set (public member function) |
(destructor) | Set destructor (public member function) |
operator= | Copy container content (public member function) |
Iterators:
begin | Return iterator to beginning (public member function) |
end | Return iterator to end (public member function) |
rbegin | Return reverse iterator to reverse beginning (public member function) |
rend | Return reverse iterator to reverse end (public member function) |
Capacity:
empty | Test whether container is empty (public member function) |
size | Return container size (public member function) |
max_size | Return maximum size (public member function) |
Modifiers:
insert | Insert element (public member function) |
erase | Erase elements (public member function) |
swap | Swap content (public member function) |
clear | Clear content (public member function) |
Observers:
key_comp | Return comparison object (public member function) |
value_comp | Return comparison object (public member function) |
Operations:
find | Get iterator to element (public member function) |
count | Count elements with a specific key (public member function ) |
lower_bound | Return iterator to lower bound (public member function) |
upper_bound | Return iterator to upper bound (public member function) |
equal_range | Get range of equal elements (public member function) |
Allocator:
get_allocator | Get allocator (public member function) |
Member types
of template <class Key, class Compare=less<Key>, class Allocator=allocator<Key> > class set;member type | definition |
---|---|
key_type | Key |
value_type | Key |
key_compare | Compare |
value_compare | Compare |
allocator_type | Allocator |
reference | Allocator::reference |
const_reference | Allocator::const_reference |
iterator | Bidirectional iterator |
const_iterator | Constant bidirectional iterator |
size_type | Unsigned integral type (usually same as size_t) |
difference_type | Signed integral type (usually same as ptrdiff_t) |
pointer | Allocator::pointer |
const_pointer | Allocator::const_pointer |
reverse_iterator | reverse_iterator<iterator> |
const_reverse_iterator | reverse_iterator<const_iterator> |
출저: http://www.cplusplus.com/reference/stl/set/
*생성자,소멸자
explicit set(const BinPred& comp = BinPred());
set(const set& x);
set(InIt first, InIt last, const BinPred& comp = BinPred());
*주의해야할 멤버함수
1) 삽입관련 리턴값
c.insert(elem);
c.insert(pos,elem);
c.insert(beg,end);
원형은 이렇게 선언되있다.
1) 삽입관련 리턴값
c.insert(elem);
c.insert(pos,elem);
c.insert(beg,end);
원형은 이렇게 선언되있다.
pair<iterator, bool> insert(const value_type& val); //이런식으로 반복자와 삽입유무를 같이 pair로 넘긴다
iterator insert(iterator it, const value_type& val);
void insert((iterator first, iterator last);
2)erase() 와 remove()의 차이
원소를 지우기위해 erase()를 쓴다. remove()를 쓰지않는다.( remove는 list에서만 사용 )
더 자세한 내용은 h2ostudio.egloos.com/4343561
3)시퀀스 컨테이너와 연관컨테이너의 erase()의 차이
시퀀스 컨테이너는 erase()를 하면 iterator를 반환하지만 연관컨테이너는 반환값이 void 이다.
이유는 성능때문이다. 연관 컨테이너는 바이너리 트리처럼 구현되어있기떄문에 성공 여부를 반환하는데 시간이 걸리기때문에 무시.
정리 참조
1. www.winapi.com
2. C++ standard Library 책
이 글을 공유하기