ABOUT ME

Today
Yesterday
Total
  • [Algorithm] priority_queue
    알고리즘 2024. 2. 1. 12:00

    1. priority_queue : 완전이진트리 (complete binary tree)

    2. heapify :  직접 연결되어 있는 노드끼리 비교해서,

      - max heap 기준 : 큰 값을 위로 올린다.

      - min heap 기준 : 작은 값을 위로 올린다.

     

    - Ex. heapify

    push(15) 시 heapity 발생

     

     

    7 - 9 heapify
    디버깅 모드로 swap 완료 확인

     

     

    3. priority_queue 와 algorithm의 sort 정렬 차이

    똑같이 less 정렬 시, heapq(priority_queue)는 내림차순으로 정렬되고, sort 정렬 시, vector가 오름차순으로 정렬됨을 볼 수 있다.

     

    priority_queue는 less<> 와 같이 사용하고, sort는 less<>() 와 같이 사용한다.

     

    #include <iostream>
    #include <vector>
    #include <queue>
    #include <algorithm>
    using namespace std;
    
    struct data {
    
    	bool operator()(int a, int b) {
    		return a < b;
    	}
    };
    
    bool cmp(int a, int b)
    {
    	return a > b;
    }
    
    int main()
    {
    	
    	priority_queue<int, vector<int>, struct data> pq;
    	pq.push(5);
    	pq.push(15);
    	pq.push(7);
    	pq.push(3);
    	pq.push(2);
    	pq.push(9);
    	pq.push(10);
    
    	vector<int> v;
    	v.push_back(5);
    	v.push_back(15);
    	v.push_back(7);
    	v.push_back(3);
    	v.push_back(2);
    	v.push_back(9);
    	v.push_back(10);
    	sort(v.begin(), v.end(), cmp);
    }

    priority_queue는 cmp를 구조체나 클래스 안에 operator()를 만들어 사용하고, sort는 함수로 선언하여 사용한다. 

     

     

    차이점

    1. sort에서는 less가 오름차순, priority_queue에서는 less가 내림차순

    2. sort에서는 less<>() 과 같이 사용, priority_queue에서는 less<>와 같이 사용

    3. sort에서는 cmp를 함수로 선언하여 사용, priority_queue는 구조체나 클래스 안에 operator() 에 구현하여 사용

    '알고리즘' 카테고리의 다른 글

    [Algorithm] 다익스트라  (0) 2024.02.02
    [Algorithm] Flood Fill (+BFS)  (1) 2024.01.31
    [Algorithm] Bit 연산  (0) 2024.01.27
    [일일 1 코테] 대충 한달쯤? 회고.  (0) 2023.12.12
Designed by Tistory.