私が理解しているように、ユーザー定義の構造体の場合は簡単です。演算子 < をオーバーロードするだけです。ただし、int/float などの場合、int の演算子 < をオーバーロードする必要はありますか? これが私が試したものです:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
bool comp(const int& a, const int& b)
{
return a<b?false:true;
}
int main ()
{
int myints[] = {10,20,30,5,15};
vector<int> v(myints,myints+5);
vector<int>::iterator it;
make_heap(v.begin(), v.end(), comp);
cout << "initial min heap : " << v.front() << endl;
for (unsigned i=0; i<v.size(); i++) cout << " " << v[i];
cout<<endl;
pop_heap (v.begin(),v.end());
v.pop_back();
for (unsigned i=0; i<v.size(); i++) cout << " " << v[i];
cout<<endl;
}
結果は次のとおりです。
initial min heap : 5
5 10 30 20 15
30 10 15 20
今 pop_heap、push_heap は最小ヒープを正しく維持しませんか? これを達成する簡単な方法はありますか?ありがとう!
編集:申し訳ありませんが、マニュアルを注意深く確認していませんでした。はい、comp を pop_heap または push_heap に渡すとうまくいくはずです。しかし、外部コンパレータを使用しないでくださいとはどういう意味ですか? それが正しい方法ではない場合、これを達成するための一般的な方法は何ですか?