运算符使用带有矢量排序的卡类进行重载

时间:2013-12-01 18:09:16

标签: c++ sorting vector operator-overloading

我希望能够使用sort函数对“card”类的向量进行排序:

struct Card 
{
    int Number;
    char Suit;
};

vector<Card> hand;
std::sort (hand.begin(), hand.end());

所以我重载了&lt;卡类的运算符,所以看看这是否允许排序工作,但我在比较“数字”变量时遇到错误。 (数字未定义)。

bool operator < (const Card); 

 bool Card::operator < (const Card ob) 
{

if (Number < ob.Number){
return true;
}
else
{
return false;
}
}

首先,我想确定这是否允许排序工作,其次,我想就如何让Num正确比较提出一些建议

4 个答案:

答案 0 :(得分:1)

数据成员名为Number,而不是Num

当你在它时,更改运算符以通过引用获取参数:

bool Card::operator < (const Card& ob) 
                                 ^ THIS

最后,整个if可以简洁地表达为

return (Num < ob.Num);

答案 1 :(得分:0)

是的,它会起作用,但您需要使用Number

bool Card::operator < (const Card& ob) 
{
  return (Number < ob.Number) ;
}

Number是您在结构Card

中使用的成员

答案 2 :(得分:0)

相应数据成员的名称是Number not Num。

运算符的正确声明和定义将显示为

bool operator < ( const Card & ) const; 

bool Card::operator < ( const Card &ob ) const
{
    return Number < ob.Number;
}

答案 3 :(得分:0)

您的Number课程中有Card个成员,而不是Num。 重构

struct Card 
{
    int Number;
    char Suit;
};

struct Card 
{
    int Num;
    char Suit;
};

或更改函数(无论是否重构类或函数体,都按引用引用参数):

bool Card::operator < (const Card& ob) 
                                 ^
                              use reference 
{
  return (Number < ob.Number) ;  //this will replace correctly your if condition
            ^           ^
}