c++ - 基于对象中属性的最小对象堆

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

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

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

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

最佳答案

请注意,使用比较器的是堆操作,不是您的容器。
假设您的函数具有以下原型(prototype):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 已经有它自己的顺序。如果你想使用堆,你可以只使用 vector ,像这样:std::vector< Class > pq;

关于c++ - 基于对象中属性的最小对象堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19086498/

相关文章:

c++ - clrscr();等效于 Code::Blocks

c++ - 无法理解如何将新对象添加到 std::list<std::unique_ptr<classname>>

c++ - "Where"这个重载运算符是否接受 "out"?

c++ 在 libconfig++::lookupValue() 中将类实例作为浮点变量传递

c++ - GetProcessImageFileName 和 LPTSTR

c# - Windows 拖放通知

c++ - LNK2001:我的 boost 库(可能)构建不正确

c++ - std::vector::push_back 的成本是成功还是无效?

c++ - 在 C++ 中处理 Winsock 错误的推荐方法是什么?

C++ vector 运算符重载