我遇到了一个问题。这是我的代码。我有class Card
和class deckOfCards
。我的问题出在函数straight
和sortFunc
中。我想对我在名为main
的{{1}}中创建的向量进行排序。我看了很多例子,但就我而言,我无法理解如何正确地做到这一点。
我的错误如fiveHand
和i
未声明:
j
答案 0 :(得分:1)
sortFunc()
声明错误,您有:
bool deckOfCards::sortFunc(vector<Card>& fiveHand[i], vector<Card>& fiveHand[j])
i
和j
未声明,正确的函数声明应为:
//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);
};
这可能会在sortFunc
与class 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
对象。