본문 바로가기
  • " 집요함 "
  • " 집요함 "
  • " 집요함 "
알고리즘/코딩 & 알고리즘 공부

[C++] Priority_queue vs Queue, pair

by joen00 2021. 7. 24.

1. Queue

1-1) Queue란?

queue는 FIFO로 먼저 들어온 것이 먼저 나가는 것입니다.

 

1-2) 사용 방법

include <queue>

queue<int> q;

 

1-3) 추가, 삭제, 조회, 기타

push: 큐에 값을 삽입

pop: 큐의 값을 삭제

front: 큐의 조회

back: 큐의 조회

size: 큐의 크기

empty: 큐가 비었으면 True, 아니면 False

 

1-4) 코드

#include <queue>
#include <iostream>
using namespace std;

int main() {

    queue<int> q;

    q.push(1);
    q.push(5);
    q.push(7);
    q.push(3);
    q.push(2);
    q.push(4);

    cout << q.front() << " " << q.back() << endl;
    cout << q.size() << endl;
    q.pop();
    cout << q.front() << " " << q.back() << endl;
    cout << q.size() << endl;

    return 0;
}

 

<결과는 더보기>

더보기

1 4
6
5 4
5

 

2. Priority_queue

 

2-1) Prioirty_Queue란?

queue형태로 큰것부터 작은 순으로 정렬된 형태를 말한다.

 

2-2) 사용 방법

include <queue>

priority_queue<int> pq;

 

2-3) 추가, 삭제, 조회, 기타

push: 큐에 값을 삽입

pop: 큐의 값을 삭제

top: 큐의 조회 == queue 의 front와 같다.

size: 큐의 크기

empty: 큐가 비었으면 True, 아니면 False

 

2-4) 코드

#include <queue>
#include <iostream>
using namespace std;

int main() {

    int arr[] = { 10,20,30,40 };

    priority_queue<int> pq1;
    priority_queue<int> pq2(arr, arr + 4);
    priority_queue<int, vector<int>, greater<int>> pq3(arr, arr + 4);

    while (!pq2.empty()) {
        cout << pq2.top() << " ";
        pq2.pop();
    }
    cout << endl;
    while (!pq3.empty()) {
        cout << pq3.top() << " ";
        pq3.pop();
    }
    cout << endl;

    return 0;
}

 

<결과는 더보기>

더보기

40 30 20 10
10 20 30 40

 

※ 주의

queue에서 아래는 불가능

int arr[] = { 10,20,30,40 };
queue<int> pq2(arr, arr + 4);

 

3. Pair

Prioirty_Queue에 pair를 적용한 모습

 

< Min부터 Max의 순서>

#include <queue>
#include <iostream>
using namespace std;

int main() {

    pair<int, int> arr[] = {
        {1,2},
        {4,5},
        {3,2},
        {7,9},
        {7,2},
        {4,1},
        {6,3},
        {6,2},
        {6,6}
    };
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int,int>>> pq(arr, arr + 9);
    while (!pq.empty()) {
        cout << pq.top().first << ", " << pq.top().second << endl;
        pq.pop();
    }
    
    return 0;
}

 

 

<결과는 더보기>

더보기

1, 2
3, 2
4, 1
4, 5
6, 2
6, 3
6, 6
7, 2
7, 9

 

< Max부터 Min의 순서>

priority_queue<pair<int, int>> pq1(arr, arr + 9);

 

728x90

댓글