基于对象属性的最小对象堆

时间:2013-09-30 04:31:43

标签: c++ stl operator-overloading priority-queue

我是C ++的新手,我正在尝试使用STL优先级队列根据对象中的distance属性创建一个最小的对象堆。我不完全确定我需要做什么,但我环顾四周,我的优先级队列看起来像这样:

std::priority_queue<Class, std::vector<Class>, object.distance> pq;

我不完全确定的是我如何首先重载比较运算符以将堆更改为最小堆,然后根据属性比较我的对象。任何帮助将不胜感激?

1 个答案:

答案 0 :(得分:1)

请注意,比较器是而不是你的contianer的堆操作。
假设你的函数有这个原型:static bool object::distance( Class, Class );
然后,您可以使用std::make_heap功能,例如std::make_heap( pq.begin(), pq.end(), object::distance )

值得注意的是,std :: priority_queue没有begin或end方法,也没有提供STL堆函数所需的RandomAcessIterator。您尝试从队列中创建堆的事实表明您错过了容器。 priority_queue已经有自己的排序。如果你想使用一个堆,你可以使用一个向量,如:std::vector< Class > pq;