冒泡排序一副卡片
Bubble sort a pack of cards
我把自己带到了一个我不知道如何摆脱的兔子洞里,我创造了一副随机牌。但是,我现在需要先按花色对它们进行排序,然后再按枚举的顺序对它们进行排序。首先我不知道如何从向量和枚举中获取元素,所以我可以比较它们,其次,我怀疑这个链接指向第一个我不确定如何交换它们,最后它会很好有一个冒泡排序的功能,我可以调用两次以先按花色排序,然后再次调用以按卡排序。
以下是库:
#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
using std::vector;
这些是结构和枚举的:
enum Rank { ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE }; // aspects of the card
enum Suit { HEARTS, CLUBS, DIAMONDS, SPADES }; // suits of the card
struct Card { //Card data numbers
Rank rank;
Suit suit;
};
struct Deck { // defines a card
vector<Card> cards; // All the cards
int size = 5; // Max deck size
};
这就是生成随机卡片组的原因:
void initialize(Deck& deck, string stdno) {
for (int count=0; count < deck.size; count++) { //creates a deck of cards
Card card;
string rcardstr = stdno.substr(rand() % 8, 1) + stdno.substr(rand() % 8, 1);
int rcard = stoi(rcardstr) % 52;
card.suit = static_cast<Suit>(rcard / 13); //cast between the enumerator and the value
card.rank = static_cast<Rank>(1 + rcard % 13);
deck.cards.push_back(card); //Adds the card to the deck of cards
}
}
这是我在意识到前两个问题之前对冒泡排序的微弱尝试:
void bubble_sort(Deck& deck ){
bool swapp = true;
while (swapp) {
swapp = false;
for (int i=0; i < deck.size; i++) {
if (deck.rank[0]
}
}
}
...最后是我的主要功能:
int main() {
string stdno="14398132";
Deck my_deck;
initialize(my_deck, stdno);
}
如果有人愿意给我几分钟的时间来解释我需要学习的地方look/what我将非常感激并确保将同样的时间还给一旦我在 C++ 方面变得更好,就加入社区。
获取卡组成员的方法是这样写:
deck.cards[i].rank
或
deck.cards[i].suit
您有多个排序选项。
- 简单写两个函数:
void bubble_sort_by_rank(Deck& deck ){
bool swapp = true;
while (swapp) {
swapp = false;
for (int i=0; i < deck.cards.size()-1; i++) {
if (deck.cards[i+1].rank > deck.cards[i].rank){
//...
}
}
}
}
和
void bubble_sort_by_suit(Deck& deck ){
bool swapp = true;
while (swapp) {
swapp = false;
for (int i=0; i < deck.cards.size()-1; i++) {
if (deck.cards[i+1].suit > deck.cards[i].suit){
//...
}
}
}
}
写一个冒泡排序函数,但将排序条件作为参数(可以是枚举)。
写一个单一的冒泡排序函数,但首先比较每张牌的花色,如果它们相等,然后按等级比较它们,或者只是重载你的 Card class 的运算符 < 作为建议在评论中。这可能是首选方法,效率更高。
如果你不坚持使用冒泡排序,你可以使用 std::sort
和一个 lambda 函数,先按花色比较你的牌,然后按等级。
对于交换,你应该能够使用 std::swap 或自己编写一个简单的模板函数:
template <class T>
void swap(T& x,T& y)
{
T temp;
temp=x;
x=y;
y=temp;
}
我把自己带到了一个我不知道如何摆脱的兔子洞里,我创造了一副随机牌。但是,我现在需要先按花色对它们进行排序,然后再按枚举的顺序对它们进行排序。首先我不知道如何从向量和枚举中获取元素,所以我可以比较它们,其次,我怀疑这个链接指向第一个我不确定如何交换它们,最后它会很好有一个冒泡排序的功能,我可以调用两次以先按花色排序,然后再次调用以按卡排序。
以下是库:
#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
using std::vector;
这些是结构和枚举的:
enum Rank { ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE }; // aspects of the card
enum Suit { HEARTS, CLUBS, DIAMONDS, SPADES }; // suits of the card
struct Card { //Card data numbers
Rank rank;
Suit suit;
};
struct Deck { // defines a card
vector<Card> cards; // All the cards
int size = 5; // Max deck size
};
这就是生成随机卡片组的原因:
void initialize(Deck& deck, string stdno) {
for (int count=0; count < deck.size; count++) { //creates a deck of cards
Card card;
string rcardstr = stdno.substr(rand() % 8, 1) + stdno.substr(rand() % 8, 1);
int rcard = stoi(rcardstr) % 52;
card.suit = static_cast<Suit>(rcard / 13); //cast between the enumerator and the value
card.rank = static_cast<Rank>(1 + rcard % 13);
deck.cards.push_back(card); //Adds the card to the deck of cards
}
}
这是我在意识到前两个问题之前对冒泡排序的微弱尝试:
void bubble_sort(Deck& deck ){
bool swapp = true;
while (swapp) {
swapp = false;
for (int i=0; i < deck.size; i++) {
if (deck.rank[0]
}
}
}
...最后是我的主要功能:
int main() {
string stdno="14398132";
Deck my_deck;
initialize(my_deck, stdno);
}
如果有人愿意给我几分钟的时间来解释我需要学习的地方look/what我将非常感激并确保将同样的时间还给一旦我在 C++ 方面变得更好,就加入社区。
获取卡组成员的方法是这样写:
deck.cards[i].rank
或
deck.cards[i].suit
您有多个排序选项。
- 简单写两个函数:
void bubble_sort_by_rank(Deck& deck ){
bool swapp = true;
while (swapp) {
swapp = false;
for (int i=0; i < deck.cards.size()-1; i++) {
if (deck.cards[i+1].rank > deck.cards[i].rank){
//...
}
}
}
}
和
void bubble_sort_by_suit(Deck& deck ){
bool swapp = true;
while (swapp) {
swapp = false;
for (int i=0; i < deck.cards.size()-1; i++) {
if (deck.cards[i+1].suit > deck.cards[i].suit){
//...
}
}
}
}
写一个冒泡排序函数,但将排序条件作为参数(可以是枚举)。
写一个单一的冒泡排序函数,但首先比较每张牌的花色,如果它们相等,然后按等级比较它们,或者只是重载你的 Card class 的运算符 < 作为建议在评论中。这可能是首选方法,效率更高。
如果你不坚持使用冒泡排序,你可以使用 std::sort
和一个 lambda 函数,先按花色比较你的牌,然后按等级。
对于交换,你应该能够使用 std::swap 或自己编写一个简单的模板函数:
template <class T>
void swap(T& x,T& y)
{
T temp;
temp=x;
x=y;
y=temp;
}