我正在尝试使用C++中的STL make_heap
等工具来创建一个1由long
类型组成的小根堆,但我的比较器似乎不能正确地进行比较。以下是我的当前比较器:
struct greater1{
bool operator()(const long& a,const long& b) const{
return a>b;
}
};
然而,当我执行 std::pop_heap(humble.begin(), humble.end(), g)
,其中g
是greater1
的一个实例,humble
是一个堆,调用sort_heap
时生成[9,15,15,25]
,我会弹出一个15
。
我的比较器是否正确?可能出了什么问题?
编辑:
我意识到我在没有比较器的情况下运行sort_heap
,而当我使用这个比较器运行它时,我从sort_heap
得到[15,15,9,25]
。现在我在想我的比较器肯定不起作用,但不确定原因。
1STL默认生成最大堆,所以我需要一个比较器。
make_heap
操作吗? - perrealmake_heap
时使用了相同的比较器,但是刚意识到我可能没有在sort_heap
中使用它。 - Jakob Weisblatconst long& a
和const long& b
不是表示指向常量值的指针吗?因此将a
与b
进行比较就是在比较这些值的地址? - Zéychin