ヒープを使用する必要があるプログラムを作成していますが、ソート方法以外はすべて正常に動作します。明らかに非常に重要です! 私の論理の何が問題なのか、それともばかげた何かが欠けているのかわかりません。しかし、これを見て新鮮な目を向けるといいでしょう。
関数には、もちろんヒープ、ルートの場所である私のベクトルが渡され、述語として STL レスまたはグレーターのいずれかが渡されます。
template<class T,class P>
void upheap(vector<T>& v, int start, P func) {
T x = v[start];
while (start > 1 && func(x, v[start/2])) {
v[start] = v[start/2]; start /= 2;
}
v[start] = x;
}
何が間違っているのですか?