Namespaces
Variants

std::ranges:: pop_heap

From cppreference.net
Algorithm library
Constrained algorithms and algorithms on ranges (C++20)
Constrained algorithms, e.g. ranges::copy , ranges::sort , ...
Execution policies (C++17)
Non-modifying sequence operations
Batch operations
(C++17)
Search operations
Modifying sequence operations
Copy operations
(C++11)
(C++11)
Swap operations
Transformation operations
Generation operations
Removing operations
Order-changing operations
(until C++17) (C++11)
(C++20) (C++20)
Sampling operations
(C++17)

Sorting and related operations
Partitioning operations
Sorting operations
Binary search operations
(on partitioned ranges)
Set operations (on sorted ranges)
Merge operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Lexicographical comparison operations
Permutation operations
C library
Numeric operations
Operations on uninitialized memory
Constrained algorithms
All names in this menu belong to namespace std::ranges
Non-modifying sequence operations
Modifying sequence operations
Partitioning operations
Sorting operations
Binary search operations (on sorted ranges)
Set operations (on sorted ranges)
Heap operations
Minimum/maximum operations
Permutation operations
Fold operations
Operations on uninitialized storage
Return types
헤더 파일에 정의됨 <algorithm>
함수 시그니처
template < std:: random_access_iterator I, std:: sentinel_for < I > S,

class Comp = ranges:: less , class Proj = std:: identity >
requires std:: sortable < I, Comp, Proj >

constexpr I pop_heap ( I first, S last, Comp comp = { } , Proj proj = { } ) ;
(1) (C++20부터)
template < ranges:: random_access_range R,

class Comp = ranges:: less , class Proj = std:: identity >
requires std:: sortable < ranges:: iterator_t < R > , Comp, Proj >
constexpr ranges:: borrowed_iterator_t < R >

pop_heap ( R && r, Comp comp = { } , Proj proj = { } ) ;
(2) (C++20부터)

지정된 heap 의 첫 번째 요소와 마지막 요소를 comp proj 에 대해 교환하고, 첫 번째 위치를 제외한 부분 범위를 comp proj 에 대한 heap으로 만듭니다. 이는 지정된 heap에서 첫 번째 요소를 제거하는 효과가 있습니다.

1) 지정된 힙은 [ first , last ) 입니다.
2) 지정된 힙은 r 입니다.

이 페이지에서 설명하는 함수형 개체들은 algorithm function objects (일반적으로 niebloids 로 알려진)입니다. 즉:

  • 명시적 템플릿 인수 목록은 이들 중 어느 것을 호출할 때도 지정할 수 없습니다.
  • 이들 중 어느 것도 인수 의존 탐색 에 보이지 않습니다.
  • 이들 중 어느 것이 일반 비한정 탐색 에 의해 함수 호출 연산자의 왼쪽 이름으로 발견될 때, 인수 의존 탐색 이 억제됩니다.

목차

매개변수

first, last - 수정할 요소들의 범위 를 정의하는 반복자-감시자 쌍
r - 수정할 요소들의 range
comp - 투영된 요소들에 적용할 비교자
proj - 요소들에 적용할 투영

반환값

1) last

복잡도

최대 2log(N) 번의 comp 적용과 4log(N) 번의 proj 적용, 여기서 N 은:

1) ranges:: distance ( first, last )

예제

#include <algorithm>
#include <array>
#include <iostream>
#include <iterator>
#include <string_view>
template<class I = int*>
void print(std::string_view rem, I first = {}, I last = {},
           std::string_view term = "\n")
{
    for (std::cout << rem; first != last; ++first)
        std::cout << *first << ' ';
    std::cout << term;
}
int main()
{
    std::array v{3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
    print("initially, v: ", v.cbegin(), v.cend());
    std::ranges::make_heap(v);
    print("make_heap, v: ", v.cbegin(), v.cend());
    print("convert heap into sorted array:");
    for (auto n {std::ssize(v)}; n >= 0; --n)
    {
        std::ranges::pop_heap(v.begin(), v.begin() + n);
        print("[ ", v.cbegin(), v.cbegin() + n, "]  ");
        print("[ ", v.cbegin() + n, v.cend(), "]\n");
    }
}

출력:

initially, v: 3 1 4 1 5 9 2 6 5 3
make_heap, v: 9 6 4 5 5 3 2 1 1 3
convert heap into sorted array:
[ 6 5 4 3 5 3 2 1 1 9 ]  [ ]
[ 5 5 4 3 1 3 2 1 6 ]  [ 9 ]
[ 5 3 4 1 1 3 2 5 ]  [ 6 9 ]
[ 4 3 3 1 1 2 5 ]  [ 5 6 9 ]
[ 3 2 3 1 1 4 ]  [ 5 5 6 9 ]
[ 3 2 1 1 3 ]  [ 4 5 5 6 9 ]
[ 2 1 1 3 ]  [ 3 4 5 5 6 9 ]
[ 1 1 2 ]  [ 3 3 4 5 5 6 9 ]
[ 1 1 ]  [ 2 3 3 4 5 5 6 9 ]
[ 1 ]  [ 1 2 3 3 4 5 5 6 9 ]
[ ]  [ 1 1 2 3 3 4 5 5 6 9 ]

참고 항목

최대 힙에 요소를 추가함
(알고리즘 함수 객체)
주어진 범위가 최대 힙인지 확인함
(알고리즘 함수 객체)
최대 힙인 가장 큰 부분 범위를 찾음
(알고리즘 함수 객체)
요소 범위로부터 최대 힙을 생성함
(알고리즘 함수 객체)
최대 힙을 오름차순으로 정렬된 요소 범위로 변환함
(알고리즘 함수 객체)
최대 힙에서 가장 큰 요소를 제거함
(함수 템플릿)