C ++에서 우선 순위 대기열을 구현하는 방법



이 기사는 예제와 함께 C ++에서 우선 순위 큐를 구현하는 방법에 대한 상세하고 포괄적 인 지식을 제공합니다.

우선 순위 큐는 STL의 컨테이너입니다. 우선 순위 큐의 각 요소가 특정 우선 순위를 가지며 우선 순위 큐에서 요소를 팝할 때 우선 순위가 가장 높은 요소가 먼저 팝된다는 점을 제외하면 큐와 유사합니다. 우선 순위 대기열과 마찬가지로 10 가지 유형의 컨테이너가 있습니다. STL . 컨테이너는 데이터를 저장하는 개체입니다. STL 컨테이너는 템플릿 클래스의 도움으로 구현되므로 다양한 유형의 데이터를 보유하도록 사용자 정의하는 것이 쉽습니다. 이 게시물에서는 Priority 대기열 및 이와 관련된 개념에 대해 자세히 설명합니다. 다음 포인터는 C ++의 Priority Queue 기사에서 다룰 것입니다.

C ++의 Priority Queue에 대한이 기사로 이동





STL의 구성 요소

STL은 데이터 저장 및 처리를위한 표준 접근 방식으로 사용할 수있는 템플릿 클래스와 함수로 구성됩니다. STL의 구성 요소에 대해 살펴 보겠습니다.

컨테이너 STL에는 10 가지 유형의 컨테이너가 정의되어 있으며 3 가지 범주로 분류됩니다. 이 3 개 중 Priority 큐는 파생 된 컨테이너의 범주에 속합니다. 각 컨테이너 클래스에는 데이터를 조작하는 데 사용할 수있는 자체 함수 세트가 있습니다.



자바의 하위 문자열은 무엇입니까

연산 – 알고리즘은 컨테이너 개체에있는 데이터를 처리하는 데 사용되는 방법입니다. STL은 초기화, 검색, 정렬, 병합, 복사에 사용할 수있는 다양한 유형의 알고리즘을 제공합니다. 알고리즘은 템플릿 기능의 도움으로 구현됩니다.

반복자 반복기는 컨테이너의 요소를 가리키는 객체입니다. 반복자는 컨테이너의 내용을 이동하는 데 도움이 될 수 있습니다. 반복자는 증가 및 감소 할 수있는 포인터와 같습니다. 알고리즘과 컨테이너 간의 링크 역할을합니다. 반복자는 컨테이너에 저장된 데이터를 조작하는 데 사용됩니다.

C ++의 Priority Queue에 대한이 기사로 이동



힙 및 우선 순위 대기열

앞서 살펴본 것처럼 Priority Queue는 파생 된 컨테이너의 범주에 속합니다. 이 범주의 다른 구성원은 스택 및 대기열입니다. 이러한 파생 컨테이너를 컨테이너 어댑터라고도합니다.

스택, 큐 및 우선 순위 큐는 다른 시퀀스 컨테이너에서 만들어 지므로 파생 컨테이너로 알려져 있습니다. 이러한 컨테이너는 데이터 조작에 사용되지 않는 모든 유형의 반복기를 지원하지 않습니다.

우선 순위 대기열이란 정확히 무엇입니까?

간단히 말해서 데이터를 저장하는 데 사용한 컨테이너입니다. 저장된 데이터의 각 요소에는 데이터를 논리적 순서로 저장하는 데 도움이 될 수있는 우선 순위가 할당됩니다.
통사론:우선 순위 _ 대기열 변수 _ 이름

우선 순위 큐를 사용하려면 프로그램에 헤더 파일을 포함시키는 것이 중요합니다.

C ++의 우선 순위 대기열예를 들어 push 함수를 사용하여 우선 순위 대기열에 2, 10, 30, 5, 6을 추가 한 다음 pop 함수를 사용하여 요소를 팝하면 출력은 30, 10, 6, 5, 2가됩니다.

자, 이제 우리는 우선 순위 대기열의 목적이나 사용을 알았습니다. 그러나 30> 10인지 어떻게 알 수 있습니까? 일종의 정렬을하고 있습니까? 이 시점에서 힙이 등장합니다. 힙에 대해 자세히 알아 보려면이 문서를 참조하십시오.

힙-힙은 나무와 같은 구조입니다. 자식 요소 노드가 부모 노드와 관련하여 힙에 배열되는 방식에 따라 힙은 두 부분으로 세분됩니다.

하나. 최소 힙 Min Heap에서 부모 노드의 값은 자식 노드의 값보다 작거나 같습니다.

2. 최대 힙 Max Heap에서 부모 노드의 값은 자식 노드의 값보다 크거나 같습니다.

노트- 우선 순위 큐는 일부 정렬 알고리즘을 사용하여 요소를 정렬하지 않고 데이터를 힙 형태로 저장했습니다.

C ++의 Priority Queue에 대한이 기사로 이동

우선 순위 대기열의 모든 요소 인쇄

우선 순위 대기열의 기본 사항을 이해 한 후 우선 순위 대기열과 함께 가장 일반적으로 사용되는 방법을 이해하는 프로그램을 구현해 보겠습니다.

#include #include using namespace std int main () {priority_queue Prior_q Prior_q.push (10) Prior_q.push (30) Prior_q.push (6) Prior_q.push (2) Prior_q.push (15) Prior_q.push (9) Prior_q.push (7) while (Prior_q.empty () == false) {cout<< Prior_q.top() << ' ' Prior_q.pop() } return 0 }

산출:

30 15 10 9 6 2

위의 프로그램에서 우리는 우선 순위 큐를 다룰 때 가장 많이 사용되는 pop (), top (), push () 함수를 사용했습니다. 우선 순위 대기열과 함께 사용할 수있는 몇 가지 방법을 살펴 보겠습니다.

크기 () : 이 함수는 우선 순위 대기열의 크기를 반환합니다.

비어 있음 () : 이 기능은 우선 순위 대기열이 비어 있는지 여부를 확인하는 데 사용됩니다. 우선 순위 큐가 비어 있으면 true를 리턴합니다.

푸시 () : 우선 순위 대기열에 요소를 삽입합니다.

팝 (): 이 함수는 우선 순위가 가장 높은 요소 인 우선 순위 큐의 최상위 요소를 제거합니다.

스왑 () : 이 함수는 우선 순위 큐의 요소를 다른 우선 순위 큐로 교체합니다. 이 함수는 우선 순위 큐를 매개 변수로 사용합니다.

emplace () : 이 함수는 우선 순위 대기열의 맨 위에 요소를 추가하는 데 사용됩니다.

프로그램을 하나 더 보겠습니다.

#include #include using namespace std int main () {priority_queue Prior_q Prior_q.push (10) Prior_q.push (30) Prior_q.push (6) Prior_q.push (2) Prior_q.push (15) Prior_q.push (9) Prior_q.push (7) while (Prior_q.empty () == false) {cout<< Prior_q.top() << ' ' Prior_q.pop() } return 0 }

산출:

2678 9 10 15 30

이것으로 우리는 C ++의 Priority Queue 기사를 마칩니다. 자세한 내용은 다음을 확인하십시오. 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 제공합니다. Edureka의 Java J2EE 및 SOA 교육 및 인증 과정은 Hibernate & Spring과 같은 다양한 Java 프레임 워크와 함께 핵심 및 고급 Java 개념 모두에 대해 교육하도록 설계되었습니다.

질문이 있으십니까? 이 블로그의 댓글 섹션에 언급 해 주시면 가능한 한 빨리 답변을 드리겠습니다.