#include <vector>
#include <algorithm>
struct doc {
double rank;
explicit doc(double r) : rank(r) {}
};
struct doc_rank_greater_than {
bool operator()(doc const& a, doc const& b) const {
return a.rank > b.rank;
}
};
int main() {
std::vector<doc> docvec;
docvec.push_back( doc(4) );
docvec.push_back( doc(3) );
docvec.push_back( doc(2) );
docvec.push_back( doc(1) );
std::make_heap(docvec.begin(),docvec.end(),doc_rank_greater_than());
std::cout << docvec.front().rank << '\n';
}
字符串
上面是一个使用自定义比较器为用户定义的数据类型创建minheap的代码。为什么我们使用a.rank>b.rank而不是a.rank<b.rank来创建minheap?
1条答案
按热度按时间inn6fuwd1#
正如the documentation of
std::make_heap
所建议的,函数默认构造一个max heap。反转比较函数会使其构造一个min heap。