The*_*ral 2 c++ sorting comparison operator-overloading
我正在尝试使用sort函数(sort(cards.begin(), cards.end());)将某些枚举按升序排序,但它似乎没有正确排序它们.它按顺序返回它们:
card3 {rank=SEVEN (7) suit=CLUBS (0) }
card4 {rank=TWO (2) suit=HEARTS (2) }
card5 = {rank=NINE (9) suit=SPADES (3) }
Run Code Online (Sandbox Code Playgroud)
我怀疑这是我的比较运算符重载的问题,这是:
inline bool operator<(const Card& c1, const Card& c2)
{
return c1.getRank() < c2.getRank() &&
c1.getSuit() < c2.getSuit();
}
Run Code Online (Sandbox Code Playgroud)
据我所知,在比较card3和card4时,只有比较的右边是真的,因此它应该返回false但是当card3<card4它返回true时!
我可能会在这里误解逻辑,但这对我没有任何意义....
谢谢你的时间 :)
您的比较运算符没有实现严格的弱排序,这是一个要求std::sort.实现这一点的一种简单方法是使用词典比较.这很简单std::tie:
#include <tuple> // for std::tie
inline bool operator<(const Card& c1, const Card& c2)
{
return std::tie(s1.getRank(), c1.getSuit()) <
std::tie(c2.getRank(), c2.getSuit());
}
Run Code Online (Sandbox Code Playgroud)
你也可以在没有的情况下推出自己的产品std::tie.这个想法是你必须处理两个等级都相同的情况.