我正在尝试在标准的52张卡片组中找到5张卡片的所有可能组合。我想我已经快知道了,但是我被困在一个特定的if语句上。我试图找出数组是否已经在向量中,如果不是,则将其添加到
if (std::find(combos.begin(), combos.end(), combo) != combos.end()){
std::cout << combos.size() << endl;
continue;
}
std::cout << combos.size() << endl;
combos.push_back(combo);
combos是std::vector<std::array<card, 5>>
,combo是std::array<card, 5>
。我在使用g ++时遇到以下错误
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/algorithm:677:71: error:
invalid operands to binary expression ('const card' and 'const card')
bool operator()(const _T1& __x, const _T1& __y) const {return __x == __y;}
card是一个看起来像这样的结构
struct card {
Suit suit;
int rank;
};
我只是不知道该怎么办。谢谢你的任何想法
答案 0 :(得分:3)
如错误消息所示,“仅”,您需要为card
类实现一个相等运算符。
bool operator == (const card &lhs, const card &rhs) // with or without the ref & symbol
{
return lhs.suit == rhs.suit && lhs.rank == rhs.rank;
}
作为附带的问题,卡的数量超过250万,并且算法以O(n ^ 2)运行,因此您可能看不到它在任何合理的时间内完成。