我只是在C ++中尝试使用make_heap()函数。以下是我通过打印来跟踪每次调用bool谓词()时要比较的元素的代码。
#include <iostream>
#include <algorithm>
using namespace std;
// bool predicate function to make a min heap
bool predicate(int a, int b){
cout << a << " " << b << endl;
if(a >= b){ return 1; }
return 0;
}
int main(){
int arr[] = {3,2,1,-1,-2};
make_heap(arr, arr+5, predicate);
return 0;
}
我得到的输出是:
-2 -1
-2 2
1 -2
2 -1
-1 3
但我期待以下输出,保持标准算法:
-2 -1
-2 2
1 -2
3 -2
2 -1
-1 3
任何帮助?
答案 0 :(得分:1)
我不会说有一个足够标准化的算法,因此您需要执行特定的比较集。 是标准化的是算法的复杂性,只要比较的数量是线性顺序,你应该很好。此外,似乎stl
在比较次数方面表现得比你好,所以你不应该担心。
正如评论中所建议的那样,您始终可以阅读编译器使用的std::make_heap
实现的代码,但不能保证在stl
的所有实现中都将使用相同的实现。