본문 바로가기

[ C/ C++ 프로그래밍 ]/[ STL ]

[ 혼연 정리 ] 연관 컨테이너 - 9 [ 컨테이너 어댑터 ]


ㅇ 큐

-  FIFO 구조
- 자료를 관리하는 기본적인 기능은 시퀸스의 것을 그대로 재사용할수있다.
 - FIFO 원리대로 동작하기 위해 꼭 필요한 인터페이스는 4가지만 있다.
 push, pop : 앞뒤에서 값을 추가하거나 제거한다.
 front, back : 앞뒤의 값을 읽는다.
- 앞의 4개의 주요 함수와 size, empty 그리고 생성자가 큐의 함수 전부이다.
- 스텍과 만찬가지로 pop은 값을 제거하기만 하면 리턴하지 않으므로 front, back으로 값을 따로 읽어야 한다.
- 큐의 템플릿 선언 다음과 같다.

1 template < class T, class Cont = deque<T> >
2 class queue  { ... }
3
4 #include <iostream>
5 #include <queue>
6
7 using namespace std;
8
9 void main()
10 {
11      queue<int> q;
12
13      q.push(1);
14      q.push(2);
15      q.push(3);
16
17      while (!q.empty()) {
18           cout << q.front() << endl;
19           q.pop();
20      }
21 }




ㅇ 우선순위 큐

- 우선 순위는 벡터와 유사하되 값을 빼 낼 때 가장 큰 값을 리턴한다는 점이 다르다.
- 필요한 동작은 push, pop, top 세가지 밖에 없다. 템플릿 선언 다음과 같다.

template<class T, class Cont = vector<T>, class BinPred = less<Cont::value_type> >
class priority_queue { ... }

- T는 우선 순위 큐에 저장될 타입이고 Cont는 기본 컨테이너이되 디폴트는 벡터로 되어 있다.
- 원할 경우 데크로 변경할 수 있지만 임의 접근이 안되는 리스트는 쓸 수 없다.
- BinPred는 값의 비교에 사용할 비교 함수 객체이되 디폴트는 less로 되어 있으므로  큰값이 가장 먼저 나온다.
- 생성자
explicit priority_queue(const BinPred& pr = BinPred());
priority_queue(const value_type *first, const value_type *last, const BinPred& pr = BinPred());

- 비어 있는 채로 생성할 수 있고 반복자 구간으로 다른 컨테이너에 있는 값을 채울 수도 있다.

1
2 #include <iostream>
3 #include <queue>
4
5 using namespace std;
6
7 void main()
8 {
9      priority_queue<int> q;
10
11      q.push(1);
12      q.push(3);
13      q.push(2);
14
15      while (!q.empty()) {
16           cout << q.top() << endl;
17           q.pop();
18      }
19 }




ps : 출처 및 자세한 내용은  www.WinAPI.co.kr 참고