我试图使用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。
我在这里做错了什么?
答案 0 :(得分:0)
啊,我想通了,我必须在pop_heap中包含那个比较器。