더북(TheBook)

힙을 생성할 때 비교 함수를 지정했다면 push_heap()에도 같은 비교 함수를 반드시 지정해야 한다.

std::vector<double> numbers {2.5, 10.0, 3.5, 6.5, 8.0, 12.0, 1.5, 6.0};
std::make_heap(std::begin(numbers), std::end(numbers),
                                    std::greater<>()); // 결과: 1.5 6 2.5 6.5 8 12 3.5 10
numbers.push_back(1.2);                                // 결과: 1.5 6 2.5 6.5 8 12 3.5 10 1.2
std::push_heap(std::begin(numbers), std::end(numbers),
                                    std::greater<>()); // 결과: 1.2 1.5 2.5 6 8 12 3.5 10 6.5

make_heap()의 세 번째 인수에 사용한 함수를 push_heap()의 세 번째 인수에 지정하지 않으면 코드가 이상하게 동작해버린다. 주석에 쓴 결과를 보면 6.5가 마지막에 있는 게 약간 이상해 보일 수도 있지만, 그림 3-6처럼 힙 트리로 그려보면 이해가 될 것이다.

▲ 그림 3-6 부동소수점 값으로 된 힙

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.