관리 메뉴

Kim's Programming

STL(Standard Template Library) - Container - Priority Queue 본문

STL - Container

STL(Standard Template Library) - Container - Priority Queue

Programmer. 2016. 1. 28. 01:15

우선순위 큐라는 자료구조는 큐에 삽입되는 데이터가 위(Top)에서부터 우선순위순(내림차순)으로 정렬되며 그러므로 우선순위 큐라고 부릅니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include<queue>
#include<iostream>
 
void print(std::priority_queue<int> Target_Queue)
{
    while (!Target_Queue.empty())
    {
        std::cout << Target_Queue.top() << " ";
        Target_Queue.pop();
    }
    std::cout << std::endl;
}
 
void main()
{
    std::priority_queue<int> PriorityQueue;
    std::priority_queue<int> PriorityQueue_Copy;
    //if Priority_qux`eue is empty, empty() function return true
    if (PriorityQueue.empty())
        std::cout << "Priority_Queue is empty" << std::endl;
 
    //push(x) function write x in ascending power in the Priority Queue 
    std::cout << std::endl<<"push(x)" << std::endl;
    PriorityQueue.push(3);
    PriorityQueue.push(5);
    PriorityQueue.push(7);
    PriorityQueue.push(10);
    PriorityQueue.push(13);
    PriorityQueue.push(2);
    print(PriorityQueue);
 
    //pop() function remove data that is the biggest data
    std::cout << std::endl << "pop()" << std::endl;
    std::cout << "Previous -> "; print(PriorityQueue);
    PriorityQueue.pop();
    std::cout << "After -> "; print(PriorityQueue);
 
    //size() function display PriorityQueue's Size
    std::cout << std::endl << "size()" << std::endl;
    std::cout << "PriorityQueue's Size -> "<< PriorityQueue.size()<<std::endl;
 
    //top() function return data that is the biggest data
    std::cout << std::endl << "top()" << std::endl;
    std::cout <<"Top() -> " <<PriorityQueue.top() << std::endl;
 
    //operator '=' ("x2 = x1") copy x1 to x2, Previous data will be deleted
    std::cout << std::endl << "Operator '='" << std::endl;
    std::cout << "PriorityQueue Previous -> "; print(PriorityQueue);
    std::cout << "PriorityQueue_Copy Previous -> "; print(PriorityQueue_Copy);
    PriorityQueue_Copy = PriorityQueue;
    std::cout << "PriorityQueue After -> "; print(PriorityQueue);
    std::cout << "PriorityQueue_Copy After -> "; print(PriorityQueue_Copy);
 
    //emplace(x) function write x in ascending power in the Priority Queue
    std::cout << std::endl << "emplace(x)" << std::endl;
    PriorityQueue.emplace(3);
    print(PriorityQueue);
    PriorityQueue.emplace(12);
    print(PriorityQueue);
 
    //x1.swap(x2) function swap x1 and x2
    std::cout << std::endl << "swap()" << std::endl;
    std::cout << "PriorityQueue Previous -> "; print(PriorityQueue);
    std::cout << "PriorityQueue_Copy Previous -> "; print(PriorityQueue_Copy);
    PriorityQueue.swap(PriorityQueue_Copy);
    std::cout << "PriorityQueue After -> "; print(PriorityQueue);
    std::cout << "PriorityQueue_Copy After -> "; print(PriorityQueue_Copy);
 
    
    //if PriorityQueue is empty, return true
    std::cout << std::endl << "swap()" << std::endl;
    if (PriorityQueue.empty())
        std::cout << "empty" << std::endl;
    else
        std::cout << "Not Empty" << std::endl;
}
cs



각 함수들의 기능을 알아보겠습니다.(함수 이름을 클릭하면 상세설명으로 이동합니다)


    1. push(x)

      우선순위 큐에 x값을 집어 넣습니다. 삽입과 동시에 정렬이 됩니다.

    2. pop()

      가장 큰 데이터(즉 가장 위에 있는 데이터)를 삭제합니다.

    3. size()

      우선순위 큐의 크기를 리턴합니다.

    4. top()

      가장 큰 데이터(즉 가장 위에 있는 데이터)를 리턴합니다.

    5. operator '='

      a=b 일때 우선순위 큐 b의 데이터를 우선순위 큐 a로 모두 복사하며 a의 기존 데이터는 모두 삭제됩니다.

    6. emplace(x)

      우선순위 큐에 데이터를 삽입합니다. 물론 삽입과 동시에 정렬이 됩니다.

    7. swap()

      x.swap(y) 우선순위 큐 x와 우선순위 큐 y의 데이터를 이름빼고 전부 교체합니다.

    8. empty()

      비어있을 경우 true를 리턴합니다.