【问题标题】:std::find using user defined struct [duplicate]std::find 使用用户定义的结构 [重复]
【发布时间】:2019-02-08 02:59:39
【问题描述】:

我试图在标准的 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&lt;std::array&lt;card, 5&gt;&gt;,combo 是 std::array&lt;card, 5&gt;。我用 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;
};

我只是不知道该怎么做。感谢您的任何想法

【问题讨论】:

  • 这看起来不是生成所有组合的合理方式。

标签: c++ c++11 std


【解决方案1】:

“就像”错误消息所说的那样,您需要为您的 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) 中运行,因此您可能看不到它在任何合理的时间范围内完成。

【讨论】:

  • 非常感谢!我承认我不太了解错误消息。至于你关于时间的观点,我希望将所有手牌及其分数保存在一个 csv 文件中,然后稍后打开它以将某些手牌的分数与其他手牌进行比较。我认为它可以让我更快地计算获胜机会。
猜你喜欢
  • 1970-01-01
  • 2016-01-20
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 2018-03-02
  • 2019-08-10
相关资源
最近更新 更多