排序矢量对象

时间:2013-11-13 01:57:00

标签: c++ sorting vector

我遇到了一个问题。这是我的代码。我有class Cardclass deckOfCards。我的问题出在函数straightsortFunc中。我想对我在名为main的{​​{1}}中创建的向量进行排序。我看了很多例子,但就我而言,我无法理解如何正确地做到这一点。

我的错误如fiveHandi未声明:

j

3 个答案:

答案 0 :(得分:1)

sortFunc()声明错误,您有:

 bool deckOfCards::sortFunc(vector<Card>&  fiveHand[i], vector<Card>&  fiveHand[j])

ij未声明,正确的函数声明应为:

 //if you want to call sortFunc like sortFunc(deck[0], deck[1])
 bool deckOfCards::sortFunc(Card& first, Card& second)
 //if you want to call sortFunc like sortFunc(deck0, deck1), then
 bool deckOfCards::sortFunc(vector<Card>& first, vector<Card>& second)

如果您想要std::sort vector<Card>,最好重载<运算符:

friend bool operator<(const Card &first, const Card &second); //to Card class
bool operator<(const Card &first, const Card &second)
{
    if (first.getFace() < second.getFace())
        return true;
    return false;
}

答案 1 :(得分:1)

要添加Ben的答案,除了他提议的更改之外,您还需要制作Card::getFace和可能Card::getSuit const方法。否则,您无法像const Card中那样在sortFunc的实例上调用这些方法。

int Card::getFace() const { return m_face; }
int Card::getSuit() const { return m_suit; }

请注意,您可以选择让sortFunc像Ben的想法一样使用自由函数,也可以在deckOfCards内使其成为静态函数:

class deckOfCards
{
public:
    // ...
    static bool sortFunc(const Card &lhs, const Card &rhs);
};

这可能会在sortFuncclass deckOfCards一起使用的代码中更好地沟通。

最后,您应修改sortFunc以便进行稳定的比较:

bool deckOfCards::sortFunc(const Card &lhs, const Card &rhs)
{
  return !(rhs.getFace() < lhs.getFace());
}

std::sort的调用如下:

std::sort(fiveHand.begin(), fiveHand.end(), deckOfCards::sortFunc);

答案 2 :(得分:0)

部分问题似乎是sortFunc需要两个向量,而您正尝试使用它来对单个向量进行排序。它应该这样定义:

bool sortFunc(const Card &first, const Card &second)
{
    if (first.getFace() < second.getFace())
        return true;
    else
        return false;
}

第二个问题:您对sort的来电不正确。传递像sortFunc这样的函数作为参数时,不包含paratheses或参数。您只需将函数名称视为变量名称,如下所示:

sort(fiveHand.begin(), fiveHand.end(), sortFunc);

另外,请注意我已将sortFunc定义为独立函数而非成员函数。如果您使用sortFunc作为成员函数尝试上面显示的调用,它将无效,因为如果没有该类型的对象,则无法调用成员函数,sort不会有一个可以使用的deckOfCards对象。