gpt4 book ai didi

c++ - C std::lower_bound,使用重载运算符作为二进制谓词 comp?

转载 作者:行者123 更新时间:2023-11-28 00:39:12 25 4
gpt4 key购买 nike

我正在完成一项作业,我们必须对多副纸牌进行编程,这些纸牌可以使用 vector 相互交互(例如,从主牌组中取出一张牌并将其添加到另一副牌中)。赋值声明我们必须使用卡片结构中重载的“小于”运算符,通过将其与 std::lower_bound 函数组合来确定卡片的正确顺序。到目前为止,这就是我所拥有的:

void CardDeck::Add(const Card& card)
{
m_Cards.insert(std::lower_bound(m_Cards.begin(),m_Cards.end(),card,*insert smaller than operator here*),card);
}

Card 结构的重载“小于”运算符如下所示。它根据枚举中的预定顺序比较牌的等级和花色:

friend bool operator< (const Card& lhs, const Card& rhs)
{
if(lhs.m_Suit < rhs.m_Suit || (lhs.m_Suit == rhs.m_Suit && lhs.m_Rank < rhs.m_Rank))
{
return true;
}
}

非常感谢任何帮助。赋值声明我们必须使用重载运算符。我们不允许自己制作一个简单的“IsSmallerThan()”方法。

非常感谢。

编辑:忘记标记问题。评论中的额外信息。

最佳答案

默认情况下,std::lower_bound对迭代器后面的类型使用小于运算符。通过定义您自己的 operator < , lower_bound 应该做正确的事。即这样调用它

std::lower_bound(m_cards.begin(), m_cards.end(), card);

应该工作正常,给一个合适的operator <在卡片类型上定义。

要指出的一件事是您的代码 operator <可以简化为

friend bool operator< (const Card& lhs, const Card& rhs)
{
return lhs.m_Suit < rhs.m_Suit ||
(lhs.m_Suit == rhs.m_Suit && lhs.m_Rank < rhs.m_Rank);
}

(这也修复了您代码中的一个细微错误)。

关于c++ - C std::lower_bound,使用重载运算符作为二进制谓词 comp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19712622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com