gpt4 book ai didi

c++ - 相同运算符和类的两个重载函数

转载 作者:搜寻专家 更新时间:2023-10-31 00:30:24 24 4
gpt4 key购买 nike

我想使用排序算法对客户端的 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());
}

最佳答案

std::sort 之一函数重载采用比较器,使用该形式并为每个实例化提供两个独立的函数或仿函数(或 lambda)。

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);

注意排序需要一个符合其排序要求的比较,通常它使用小于比较来排序元素。确切的比较可以不同,但​​需要遵守相同的排序要求(要进一步阅读,请参阅有关 std::sort 算法的信息,以及 this on strict weak ordering).

关于c++ - 相同运算符和类的两个重载函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37079163/

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