std :: find使用用户定义的结构

时间:2018-09-03 04:36:10

标签: c++ c++11 std

我正在尝试在标准的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;
};

我只是不知道该怎么办。谢谢你的任何想法

1 个答案:

答案 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)运行,因此您可能看不到它在任何合理的时间内完成。