[英]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.