연관 컨테이너-셋(set)

들어가기전에 반드시 봐야되는 부분
[프로그래밍/STL] - 일반화 프로그래밍, STL기초

[프로그래밍/STL] - 컨테이너 (시퀀스,연관,어댑터)


<셋>
 
0. 연관 컨테이너이므로 원소들이 정렬되어 들어간다.
 1. #include <set> 을 추가하여야함. 
 2. namespace std에 정의되어있다. 
 2. 원소를 하나를 가지는 연관컨테이너
 3. 셋은 키의 중복을 허용하지 않는다.
 4. 멀티셋은 키의 중복을 허용함.
 5. 양방향 반복자를 사용함
 6. 기본적으로 insert로 삽입하고, erase로 삭제, find로 검색




*정렬관련
1)기본적으로 정렬은 less<> (미리정의된 함수객체)오름차순을 사용함. 
( 그러므로 set에 들어가는 원소타입은 반드시 < operator 가 정의되어있어야함 )

2) =, !=, <, >, <=, >= 같은것이 셋,맵에 기본으로 정의 되어있다.
이런 비교동작은 오직 같은 타입의 컨테이너에 대해서만 제공된다.!!

!
 


*내부구현
기본적으로 이진트리도 구현되어있다.( 탐색이 용이 하도록 ) 

이진트리로 구현되있으므로, 검색은 용이하나 값의 수정이 불가능하다.( 수정을 하려면 지워주고 넣는식으로 해야함 )


 
 

*특별한 검색 함수들을 제공
set과 map은 검색을 용이하도록 만든 컨테이너이다.
그러므로 특별한 검색 함수들을 제공한다. 
 

count(요소) : 요소의 값을 가지는 원소의 개수를 반환한다. 
find(요소)   : 요소의 값을 가지는 첫 번째 원소의 위치를 반환한다. 존재하지 않으면 end() 반환
lower_bound(요소) : 요소의 값보다 크거나 같은 값을 가지는 원소의 위치를 반환함.
upper_bound(요소) : 요소의 값보다 큰 값을 가지는 운소의 위치를 반환함
equal_range(요소) : 정렬된 상태를 깨트리지 않고 요소가 삽입될 수 있는 첫 번째 위치와 마지막 위치를 반환.



Member functions


Iterators:

Capacity:

Modifiers:

Observers:

Operations:

Allocator:

Member types

of template <class Key, class Compare=less<Key>, class Allocator=allocator<Key> > class set; 
member typedefinition
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);

원형은 이렇게 선언되있다.
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 책




 
 
 
 

이 글을 공유하기

댓글

Designed by JB FACTORY