gpt4 book ai didi

c++ - 尝试使用比较运算符对对象 vector 进行排序

转载 作者:行者123 更新时间:2023-12-01 14:44:19 25 4
gpt4 key购买 nike

我正在尝试实现纸牌游戏,而我正在使用纸牌 vector 。
我实现了每个比较运算符,希望'sort'函数可以根据这些运算符进行排序,但是我始终认为ace是最小的卡片。

我尝试手动排序,但它变得非常难看。

class Card {

int worth;
int num;
Shapes shape_id;
string name;
string shape_name;
string color;
char symbol;
string intToShape(int n);
string intToColor(int n);
public:
Card(int n, int shap);
Card();
int getNumOfCard() const;
int getShapeOfCard() const;
friend std::ostream& operator<<(std::ostream& os, const Card& c);
bool operator >(Card& other);
bool operator <(Card& other);
bool operator ==(Card& other);
bool operator >=(Card& other);
bool operator <=(Card& other);
bool operator !=(Card& other);
};

卡的主管:
Card::Card(int n, int shap) : num(n) , shape_id((Shapes)shap) {
if (num>10 || num ==1) {
switch (num) {
case 11:
name = "Jack" + intToShape(shap);
symbol ='J';
break;
case 12:
name = "Quin" + intToShape(shap);
symbol = 'Q';
break;
case 13:
name = "King" + intToShape(shap);
symbol = 'K';
break;
case 1:
name = "Ace" + intToShape(shap);
symbol = 'A';
break;
default:
string exceptionMessage("num > 13");
throw (PckErr(exceptionMessage));
}
} else {
symbol = 'N';
name = std::to_string(num) + intToShape(shap);
}
if (num == 1) {
worth = 14; //ace worth 14!
} else {
worth = num;
}
shape = intToShape(shap);
color = intToColor(shap);
}

排序部分:
for (int i = 0; i < 12; ++i) {
histogram[pCard[i]->getNumOfCard()]++;
it = sorted_hand.insert(it,pCard[i]);
}
std::sort(sorted_hand.begin(), sorted_hand.end());

运营商实现:
bool Card::operator>(Card &other) {
return this->worth > other.worth;
}

bool Card::operator<(Card &other) {
return this->worth < other.worth;
}

... same for all

我期望5张卡片的排序 vector 为:
2,3,4,5,1
但实际的 vector 是:
1,2,3,4,5。

最佳答案

我可以想到几种解决问题的方法。
解决方案1
将值14分配给ace。
解决方案2
在比较功能中要考虑ace的特殊性。

bool Card::operator<(Card &other) {
int l = (this->worth == 1) ? 14 : this->worth;
int r = (other.worth == 1) ? 14 : other.worth;
return (l < r);
}
清理建议。
更改功能以使用 const对象。
bool Card::operator<(Card const& other) const {
int l = (this->worth == 1) ? 14 : this->worth;
int r = (other.worth == 1) ? 14 : other.worth;
return (l < r);
}

关于c++ - 尝试使用比较运算符对对象 vector 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58566148/

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