std堆排序使用自定义>比较

时间:2014-05-08 01:59:09

标签: c++ std comparator

我试图使用std堆对整数数组进行排序。

#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

struct compare {
    bool operator() (const int& s1, const int& s2) const{
        if (s1 < s2) return true;
        return false;
    }
};

int main() {
    vector<int> v;
    v.push_back(8);
    v.push_back(1);
    v.push_back(3);
    v.push_back(2);
    v.push_back(4);
    make_heap(v.begin(), v.end(), compare());
    for (int i=0; i<5; i++) {
        int t = v.front();
        pop_heap(v.begin(), v.end()); v.pop_back();
        cout << t << ' ';
    }
    cout << endl;
}

现在这种排序输出8,4,3,2,1,这是正确的。

但如果我改变s1&lt; s2至s1>比较器函数中的s2,结果变为1,4,8,3,2。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

啊,我想通了,我必须在pop_heap中包含那个比较器。