gpt4 book ai didi

c++ - 自定义类上的 STL 优先级队列

转载 作者:IT老高 更新时间:2023-10-28 22:33:07 25 4
gpt4 key购买 nike

让我的优先级队列识别它应该按哪个参数排序时遇到了很多麻烦。我在自定义类中重载了小于运算符,但它似乎没有使用它。以下是相关代码:

节点.h

class Node
{
public:
Node(...);
~Node();
bool operator<(Node &aNode);
...
}

节点.cpp

#include "Node.h"
bool Node::operator<(Node &aNode)
{
return (this->getTotalCost() < aNode.getTotalCost());
}

getTotalCost() 返回一个整数

main.cpp

priority_queue<Node*, vector<Node*>,less<vector<Node*>::value_type> > nodesToCheck;

我错过了什么和/或做错了什么?

最佳答案

less<vector<Node*>::value_type>意味着您的比较器将指针相互比较,这意味着您的 vector 将按节点内存中的布局进行排序。

你想做这样的事情:

#include <functional>
struct DereferenceCompareNode : public std::binary_function<Node*, Node*, bool>
{
bool operator()(const Node* lhs, const Node* rhs) const
{
return lhs->getTotalCost() < rhs->getTotalCost();
}
};

// later...
priority_queue<Node*, vector<Node*>, DereferenceCompareNode> nodesToCheck;

请注意,您需要在 totalCost 的定义中保持 const 正确。 .

编辑:既然 C++11 就在这里,您不再需要从 std::binary_function 继承(这意味着您不需要#include 函数式)

关于c++ - 自定义类上的 STL 优先级队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1541560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com