0

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

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

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

4

1 回答 1

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 堆函数所需的 RandomAcessIterators。您试图从队列中创建一个堆的事实表明您误用了容器。priority_queue 已经有它自己的排序。如果要使用堆,可以只使用向量,如下所示:std::vector< Class > pq;

于 2013-09-30T13:09:05.090 回答