两个重载函数用于同一个运算符和类

Dan*_*ues 2 c++ sorting overloading class operator-keyword

我想使用排序算法来排序我vector的客户端,但问题是我有两个不同的标准来排序它们.

要将它们显示在屏幕上并将它们保存到文件中,我需要按ID对它们进行排序,但要将其用于其他一些东西(比如了解十大最差的客户),我需要用它们的总和对它们进行排序.花了.

这些是operator==客户端类的重载函数,但显然它们不能共存.有人可以给我一个解决方案吗?

    class Client
    {
    public:
    //...
        unsigned int getID() const;
        double getSum() const;
    //...
    private:
        unsigned int ID;
        //...
        double sum;
    };

    bool operator==(const Client &LHS, const Client &RHS)
    {
        return (LHS.getID() == RHS.getID());
    }

    bool operator==(const Client &LHS, const Client &RHS)
    {
        return (LHS.getSum() == RHS.getSum());
    }
Run Code Online (Sandbox Code Playgroud)

Nia*_*all 5

其中一个std::sort函数重载需要一个比较器,使用该形式并为每个实例提供两个独立的函数或函子(或lambdas).

class Client
{
public:
    //...
    unsigned int getID() const;
    double getSum() const;
    //...
private:
    unsigned int ID;
    //...
    double sum;
};

bool CompareByID(const Client &LHS, const Client &RHS)
{
    return (LHS.getID() < RHS.getID());
}

bool CompareBySum(const Client &LHS, const Client &RHS)
{
    return (LHS.getSum() < RHS.getSum());
}

// ...
std::sort(container.begin(), container.end(), CompareByID);
Run Code Online (Sandbox Code Playgroud)

请注意,排序需要遵循其排序要求的比较,通常使用小于比较来排序元素.确切的比较可以是不同的,但需要遵守同样的顺序要求(进一步阅读,请参阅该信息std::sort的算法,这对 严格的弱序).