<algorithm> </algorithm>中的make_heap()函数算法

时间:2013-11-15 09:21:29

标签: c++ algorithm stl heap predicates

我只是在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

任何帮助?

1 个答案:

答案 0 :(得分:1)

我不会说有一个足够标准化的算法,因此您需要执行特定的比较集。 标准化的是算法的复杂性,只要比较的数量是线性顺序,你应该很好。此外,似乎stl在比较次数方面表现得比你好,所以你不应该担心。

正如评论中所建议的那样,您始终可以阅读编译器使用的std::make_heap实现的代码,但不能保证在stl的所有实现中都将使用相同的实现。