2013-09-30 73 views
0

我是C++的新手,我试图使用STL优先级队列来创建基于对象中距离属性的最小堆对象。我不完全知道我需要做的,但我环顾四周,我认为我的优先级队列会是这个样子:基于对象属性的最小堆对象

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

什么我不能完全肯定的是我如何去超载的比较操作员首先将堆改为最小堆,然后再根据属性比较我的对象。任何帮助,将不胜感激?

+0

does http://stackoverflow.com/questions/14016921/comparator-for-min-heap-in-c help? –

回答

1

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

这也许值得一提的是一个std :: priority_queue没有开始或结束的方法和没有按不提供STL堆函数所需的RandomAcessIterators。你试图从你的队列中堆出一堆事实表明你正在错过容器。 priority_queue已经有自己的排序。如果你想使用堆,你可以使用一个向量,如下所示:std::vector<Class> pq;