더북(TheBook)

3.4 | priority_queue<T> 컨테이너 어댑터 사용하기

 

priority_queue 컨테이너 어댑터는 원소들을 정렬된 순서로 담아두는 큐를 정의한다. 즉, 우선순위가 가장 높은 원소(기본은 값이 가장 큰 원소)가 큐의 앞에 온다. 이것도 큐이므로 첫 번째 원소만 접근할 수 있다. 따라서 우선순위가 가장 높은 원소가 항상 먼저 처리된다. ‘우선순위’를 어떻게 정의할 것인가는 내가 결정한다. 사고로 병원 응급실에 도착한 환자를 priority_queue로 관리한다면 환자의 중증도를 우선순위로 정할 수 있다. 원소가 은행의 현재 계좌 거래내역이라면 부채가 신용도보다 우선순위가 높을 것이다.

priority_queue 템플릿은 세 가지 매개변수가 있고, 그중에 두 가지는 기본 인수다. 첫 번째는 저장할 객체의 타입, 두 번째는 원소를 저장할 때 사용할 기반 컨테이너, 세 번째는 원소의 순서를 결정하는 조건자를 정의한 함수 객체 타입이다. 따라서 템플릿 타입은 다음과 같다.

template
<typename T, typename Container=std::vector<T>, typename Compare=std::less<T>>
class priority_queue

템플릿 타입을 보면 priority_queue 인스턴스는 vector 컨테이너를 기본으로 래핑한 것이다. functional 헤더에 정의된 less<T> 함수 객체 타입은 기본 순서 조건자로 이를 이용해 컨테이너에서 가장 큰 객체가 앞에 오게 할 수 있다. functional 헤더에는 greater<T>도 정의되어 있는데, 이를 원소 순서를 정하는 마지막 템플릿 인수로 지정하면 가장 작은 원소가 앞에 오게 할 수 있다. 물론, 마지막 템플릿 인수를 지정하려면 나머지 두 가지 템플릿 타입 인수도 제공해야 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.