STL_make_heap(), pop_heap(), push_heap()

2572 ワード

make_Heap()は、大きなスタック、または小さなスタックを生成するmakeです.heap(_RAITter,_RAITter)デフォルトでは、大きなスタックmake_が生成されます.heap(_RAIter,_RAIter,_Compare) _Compareには2つのパラメータがあります.1つはgreater(小さなトップスタックを生成)で、1つはless(大きなトップスタックを生成)です.
push_Heap()は、スタックに要素を挿入し、スタックのルールをpush_にします.heap(_RAitter,_RAitter)デフォルトは大頂山push_heap(_RAIter,_RAIter,_Compare) _Compareには2つのパラメータがあり、1つはgreater(小さなトップスタック)、1つはlessです(大屋根ヒープ)push_heapを呼び出す前にmake_heapを呼び出す必要があります最初の配列push_back挿入要素を作成し、次にpush_heapを呼び出す必要があります.これにより、最後の要素が適切な位置に挿入されます.push_heapの_Compareとmake_heapの_Compareパラメータが一致しなければなりません.そうしないと、ヒープの挿入に失敗し、最後の要素が最後の位置に挿入され、挿入が発生します.失敗
pop_Heap()はスタックに基づいて、スタックトップ要素をポップアップします.pop_heap(_RAitter,_RAitter)デフォルトは大頂山pop_heap(_RAIter,_RAIter,_Compare) _Compareには2つのパラメータがあり、1つはgreater(小さなトップスタック)、1つはless(大きなトップスタック)、例えばpop_heap(nums.begin()、nums.end()greater()は、スタックトップ要素(配列の最初の位置)と配列の最後の位置を合わせます.その後、配列pop_backを呼び出して、この要素を削除できます.pop_heapの_Compareとmake_heapの_Compareパラメータは一致しなければなりません.そうしないと失敗します.
# include 
# include 
# include 
# include 

using namespace std;

void printVec(vector nums)
{
    for (int i = 0; i < nums.size(); ++i)
        cout << nums[i] << " ";
    cout << endl;
}
int main(void)
{
    int nums_temp[] = {8, 3, 4, 8, 9, 2, 3, 4, 10};
    vector nums(nums_temp, nums_temp + 9);
    cout << "make_heap  : ";
    printVec(nums);

    cout << "(  (less))make_heap: ";
    make_heap(nums.begin(), nums.end());
    printVec(nums);

    cout << "(less)make_heap: ";
    make_heap(nums.begin(), nums.end(), less ());
    printVec(nums);

    cout << "(greater)make_heap: ";
    make_heap(nums.begin(), nums.end(), greater ());
    printVec(nums);

    cout << "  ,nums     greater" << endl;
    cout << "push_back(3)" << endl;
    nums.push_back(3);
    cout << "  (less)push_heap   push_heap  : ";
    push_heap(nums.begin(), nums.end());
    printVec(nums);
    cout << "push_heap greater  make_heap  ,  push_heap  : ";
    push_heap(nums.begin(), nums.end(), greater());
    printVec(nums);
    cout << "(greater,     )pop_heap: ";
    pop_heap(nums.begin(), nums.end(),greater());
    printVec(nums);
    cout << "pop_back(): ";
    nums.pop_back();
    printVec(nums);
}

変換元:https://blog.csdn.net/qq_29630271/article/details/66478256