比较在C 中的功能

the Comparison Functions in C++

本文关键字:功能 比较      更新时间:2023-10-16

我当前正在C 中学习STL。我一直在研究正在编码的程序中的参考。它使用自定义对象使用优先队列。

struct Foo
{
    std::list<int> path;
    int cost;
    bool operator>(const Foo& rhs) const
    {
        return cost > rhs.cost;
    }
};

class mycomparison
{
public:
    bool operator() (Foo p1, Foo p2) const{
        return (p1>p2);
    }
};

priority_queue<Foo,vector<Foo>,mycomparison> myPQ;

对于成本较低的对象,优先级队列中的对象优先考虑。我知道您能够定义自定义比较器。但是我不确定为什么结构中有一个超载的运算符,而在类MyComparison中的自定义操作员则在优先级队列中使用。如果我删除了结构中的超载操作员,则拒绝运行。

如果有人会向我解释两种代码,关系,它如何影响彼此,这将不胜感激!

谢谢。

std::priority_queue使用 std::less<T>作为默认比较器。

如果在不合适的情况下,如您的情况,您必须定义自定义比较器或使用适合您需要的另一个比较器。

比较器的operator()功能的实现详细信息完全取决于您。

您需要Foo中的operator>功能吗?当然不是。您可以使用:

class mycomparison
{
  public:
    bool operator() (Foo p1, Foo p2) const{
        return (p1.cost > p2.cost);
    }
};

可能已经消除了实现Foo::operator>的需求。

但是,使用return (p1 > p2)将抽象保持在正确的位置。p1 > p2含义的详细信息最好保留到Foo

顺便说一句,您可以使用:

std::priority_queue<Foo, std::vector<Foo>, std::greater<Foo>> myPQ;

那将使mycomparison不必要。