<operator不应该返回true

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时!

我可能会在这里误解逻辑,但这对我没有任何意义....

谢谢你的时间 :)

jua*_*nza 5

您的比较运算符没有实现严格的弱排序,这是一个要求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.这个想法是你必须处理两个等级都相同的情况.