본문 바로가기

C

c++ stl heap 기록

stl의 heap 기능을 활용해서 임의의 벡터를 힙 구조로 변경해 줄 수 있다.

std::make_heap(first iter, last iter)를 활용해서 벡터를 힙으로 변경 가능하다. (시간복잡도 : O(N))

std::pop_heap(first iter, last iter)를 활용해서 벡터의 최댓값을 맨 아래로 정렬 가능하다. (시간복잡도 : O(LogN)

vector.pop_back()을 활용해서 맨 아래 있는 원소를 제거 가능하다.

vector.emplace_back(element)를 활용해서 힙에 원소를 넣어줄 수 있다.

std::push_heap(first iter, last iter)을 사용하면 emplace_back으로 넣은 원소가 포함된 벡터를

힙으로 바꿔줄 수 있다. 

 

코드 >>

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
#include <iostream>
#include <queue>
 
int main()
{
    std::cout << "Max heap:\n";
    std::vector<int> v{ 1,3,5,7,9,11 };
    std::cout << "initially, v: ";
    for (auto i : v)
    {
        std::cout << i << ' ';
 
    }
    std::cout << '\n';
 
    // Heap으로 바꾼다.
    //Time complexity O(n)
    std::make_heap(v.begin(), v.end()); // {11,9,5,7,3,1}, time_complexity O(N)
    for (auto i : v)
    {
        std::cout << i << ' ';
 
    }
    std::cout << std::endl;
 
    std::pop_heap(v.begin(), v.end()); // 원소를 제거하지 않고 트리만 만듦 O(logn)
    std::cout << "after pop_heap, v:" << std::endl// {9,7,5,1,3,11}
    for (auto i : v)
    {
        std::cout << i << ' ';
 
    }
    std::cout << std::endl;
    
    v.pop_back();
    std::cout << "After pop back : " << std::endl;
    for (auto i : v)
    {
        std::cout << i << ' ';
 
    }
    std::cout << std::endl;
    
    v.emplace_back(10);
    std::cout << "After emplace back : " << std::endl;
    for (auto i : v)
    {
        std::cout << i << ' ';
 
    }
    std::cout << std::endl;
 
 
    std::push_heap(v.begin(), v.end()); // O(logn)
    std::cout << "After push_heap : " << std::endl;
    for (auto i : v)
    {
        std::cout << i << ' ';
 
    }
    std::cout << std::endl;
    return 0;
}

 

'C' 카테고리의 다른 글

c++ tuple, pair  (0) 2021.06.28
c++ float 조심할 점  (0) 2021.06.28
c++ priority_queue  (0) 2021.06.28
c++ stack, Queue  (0) 2021.06.27
c++ list와 vector 비교  (0) 2021.06.27