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)
其中一个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的算法,这对 严格的弱序).