簡體   English   中英

如何在C ++中使用make_heap創建最小堆

[英]How to use make_heap to create a min heap in c++

如何在<algorithm>使用make_heap方法創建一個最小堆

從它說的文檔中 ,我們可以傳入第三個參數Compare comp ,它是

二進制函數,該函數接受范圍內的兩個元素作為參數,並返回可轉換為bool的值。 返回的值指示在其定義的特定嚴格弱順序中,是否認為作為第一個參數傳遞的元素小於第二個。 該函數不得修改其任何參數。 這可以是一個函數指針或一個函數對象。

所以我嘗試傳遞一個函數對象如下

#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>

using namespace std;

struct myComp {

    bool operator() (const pair<int, char>& lhs, const pair<int, char>& rhs) {
        return lhs.first > rhs.first;
    }
};

int main() {
    vector< pair<int, char> > Q;
    Q.push_back( pair<int, char>(10, 'c') );
    Q.push_back( pair<int, char>(123, 'a') );
    Q.push_back( pair<int, char>(2, 'd') );
    Q.push_back( pair<int, char>(9, 'f') );
    Q.push_back( pair<int, char>(81, 'b') );
    Q.push_back( pair<int, char>(4, 'e') );

    make_heap(Q.begin(), Q.end(), myComp);

    pop_heap(Q.begin(), Q.end());

    cout << Q.back().first << ", " << Q.back().second << endl;
    Q.pop_back();

    return 0;
}

我收到以下錯誤

jdoodle.cpp: In function 'int main()':
jdoodle.cpp:25:38: error: expected primary-expression before ')' token
  make_heap(Q.begin(), Q.end(), myComp);
                                      ^

我不太明白這是什么意思,我在做什么錯?

myComp是類型名稱,而std::make_heap是函數(模板),要調用它,您需要傳遞一個object 因此,創建該類型的對象。

make_heap(Q.begin(), Q.end(), myComp{});

{}將初始化您傳遞的myComp對象。

閱讀文檔時,“ Compare是推導的函子類型,但是請注意,函數模板需要comp 函數參數 ,這就是您的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM