logo

C++의 우선순위 큐

C++의 우선순위 큐는 우선순위가 가장 높은 요소만 고려하는 STL의 파생 컨테이너입니다. 큐는 FIFO 정책을 따르는 반면 우선순위 큐는 우선순위에 따라 요소를 팝합니다. 즉, 우선순위가 가장 높은 요소가 먼저 팝됩니다.

특정 측면에서 일반 대기열과 유사하지만 다음과 같은 측면에서 다릅니다.

java 문자열을 int로 변환하는 방법
  • 우선순위 큐에서는 큐의 모든 요소가 일부 우선순위와 연관되어 있지만 큐 데이터 구조에는 우선순위가 존재하지 않습니다.
  • 우선순위 대기열에서 우선순위가 가장 높은 요소가 먼저 제거되고 대기열은 다음 요소를 따릅니다. FIFO(선입선출) 정책은 먼저 삽입된 요소가 먼저 삭제된다는 것을 의미합니다.
  • 동일한 우선순위를 가진 요소가 두 개 이상 존재하는 경우 대기열에 있는 요소의 순서가 고려됩니다.

참고: 우선순위 큐는 우선순위가 가장 높은 요소가 우선순위 큐에서 먼저 제거된다는 점을 제외하면 일반 큐의 확장 버전입니다.

우선순위 대기열의 구문

 priority_queue variable_name; 

간단한 예를 통해 우선순위 큐를 이해해보자.

C++의 우선순위 큐

위 그림에서는 push() 함수를 사용하여 요소를 삽입했으며 삽입 작업은 일반 대기열과 동일합니다. 그러나 pop() 함수를 사용하여 대기열에서 요소를 삭제하면 우선 순위가 가장 높은 요소가 먼저 삭제됩니다.

우선순위 대기열의 구성원 기능

기능 설명
푸시() 우선순위 큐에 새 요소를 삽입합니다.
팝() 우선 순위가 가장 높은 대기열에서 최상위 요소를 제거합니다.
맨 위() 이 함수는 우선순위 큐의 최상위 요소를 처리하는 데 사용됩니다.
크기() 우선순위 큐의 크기를 결정합니다.
비어 있는() 큐가 비어 있는지 여부를 확인합니다. 확인 내용에 따라 상태를 반환합니다.
교환() 우선순위 큐의 요소를 동일한 유형과 크기를 가진 다른 큐로 교체합니다.
위치() 우선순위 큐의 맨 위에 새 요소를 삽입합니다.

간단한 우선순위 큐 프로그램을 만들어 보겠습니다.

 #include #include using namespace std; int main() { priority_queue p; // variable declaration. p.push(10); // inserting 10 in a queue, top=10 p.push(30); // inserting 30 in a queue, top=30 p.push(20); // inserting 20 in a queue, top=20 cout&lt;<'number of elements available in 'p' :'<<p>In the above code, we have created a priority queue in which we insert three elements, i.e., 10, 30, 20. After inserting the elements, we display all the elements of a priority queue by using a while loop.<p></p> <p> <strong>Output</strong> </p> <pre> Number of elements available in &apos;p&apos; :3 30 20 10 zzzzz/ </pre> <p> <strong>Let&apos;s see another example of a priority queue.</strong> </p> <pre> #include #include using namespace std; int main() { priority_queue p; // priority queue declaration priority_queue q; // priority queue declaration p.push(1); // inserting element &apos;1&apos; in p. p.push(2); // inserting element &apos;2&apos; in p. p.push(3); // inserting element &apos;3&apos; in p. p.push(4); // inserting element &apos;4&apos; in p. q.push(5); // inserting element &apos;5&apos; in q. q.push(6); // inserting element &apos;6&apos; in q. q.push(7); // inserting element &apos;7&apos; in q. q.push(8); // inserting element &apos;8&apos; in q. p.swap(q); std::cout &lt;&lt; &apos;Elements of p are : &apos; &lt;&lt; std::endl; while(!p.empty()) { std::cout &lt;&lt; p.top() &lt;&lt; std::endl; p.pop(); } std::cout &lt;&lt; &apos;Elements of q are :&apos; &lt;&lt; std::endl; while(!q.empty()) { std::cout &lt;&lt; q.top() &lt;&lt; std::endl; q.pop(); } return 0; } </pre> <p>In the above code, we have declared two priority queues, i.e., p and q. We inserted four elements in &apos;p&apos; priority queue and four in &apos;q&apos; priority queue. After inserting the elements, we swap the elements of &apos;p&apos; queue with &apos;q&apos; queue by using a swap() function.</p> <p> <strong>Output</strong> </p> <pre> Elements of p are : 8 7 6 5 Elements of q are : 4 3 2 1 </pre> <hr></'number>

우선순위 큐의 또 다른 예를 살펴보겠습니다.

 #include #include using namespace std; int main() { priority_queue p; // priority queue declaration priority_queue q; // priority queue declaration p.push(1); // inserting element &apos;1&apos; in p. p.push(2); // inserting element &apos;2&apos; in p. p.push(3); // inserting element &apos;3&apos; in p. p.push(4); // inserting element &apos;4&apos; in p. q.push(5); // inserting element &apos;5&apos; in q. q.push(6); // inserting element &apos;6&apos; in q. q.push(7); // inserting element &apos;7&apos; in q. q.push(8); // inserting element &apos;8&apos; in q. p.swap(q); std::cout &lt;&lt; &apos;Elements of p are : &apos; &lt;&lt; std::endl; while(!p.empty()) { std::cout &lt;&lt; p.top() &lt;&lt; std::endl; p.pop(); } std::cout &lt;&lt; &apos;Elements of q are :&apos; &lt;&lt; std::endl; while(!q.empty()) { std::cout &lt;&lt; q.top() &lt;&lt; std::endl; q.pop(); } return 0; } 

위 코드에서는 p와 q라는 두 개의 우선순위 큐를 선언했습니다. 우리는 'p' 우선순위 큐에 4개의 요소를 삽입하고 'q' 우선순위 큐에 4개의 요소를 삽입했습니다. 요소를 삽입한 후 swap() 함수를 사용하여 'p' 대기열의 요소를 'q' 대기열로 교환합니다.

산출

내 모니터 화면 크기는 얼마야
 Elements of p are : 8 7 6 5 Elements of q are : 4 3 2 1