gpt4 book ai didi

c++ - 如何为队列重载 > 运算符

转载 作者:太空宇宙 更新时间:2023-11-03 10:37:03 25 4
gpt4 key购买 nike

我有一个优先级队列,我是这样定义的:

priority_queue<Node*,vector<Node*>,greater<Node*>> myQueue; 

我必须根据参数 param 添加到队列中,并且我已经像这样重载了它

bool Node::operator>(const Node& right) const
{
return param>right.param;
}

由于重载函数不采用指针对象,我应该如何更改它以便调用我的重载函数。我正在以这种方式添加到队列中:

Node *myNode
myQueue.add(myNode);

我无法在不创建指针对象的情况下传递 myNode。请指导..

@塞利比兹我做过这样的事情

    template<typename Node, typename Cmp = std::greater<Node> >
struct deref_compare : std::binary_function<Node*,Node*,bool>
{
deref_compare(Cmp const& cmp = Cmp())
: cmp(cmp) {}

bool operator()(Node* a, Node* b) const {
return cmp(*a,*b);
}

private:
Cmp cmp;
};

typedef deref_compare<Node,std::greater<Node> > my_comparator_t;
priority_queue<Node*,vector<Node*>,my_comparator_t> open;

我充满了错误。

最佳答案

您需要为比较编写自己的仿函数,因为您不能为指针重载运算符>。因此,您将使用自己的专用类和适当的函数调用运算符,而不是更大。这甚至可以通用地完成。

template<typename T, typename Cmp = std::less<T> >
struct deref_compare : std::binary_function<T const*,T const*,bool>
{
deref_compare(Cmp const& cmp = Cmp())
: cmp(cmp) {}

bool operator()(T const* a, T const* b) const {
return cmp(*a,*b);
}
private:
Cmp cmp;
};

typedef deref_compare<Node,std::greater<Node> > my_comparator_t;

Edit1:我刚刚意识到您甚至可以更多一般地使用迭代器而不是指针。 ;-)

Edit2:如果您对模板不满意并且不需要这种概括,您也可以使用

struct my_node_ptr_compare
{
bool operator()(Node const* a, Node const* b) const {
return *a > *b;
}
};

priority_queue<Node*,vector<Node*>,my_node_ptr_compare> foo;

关于c++ - 如何为队列重载 > 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1479117/

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