如何打印random_shuffle向量<struct> </struct>的值

时间:2014-02-16 02:33:47

标签: c++ random vector

我有一个带有struct数据类型的向量,我在函数中是random_shuffle我想打印出结果。我尝试了各种各样的东西,没有运气。我想让它控制它洗牌的次数,并希望它能够打印出结果。我真的试图自己麻烦拍摄,我知道我需要制作一个for循环,但我不知道如何让它打印出洗牌的结果,而且如果我想让它洗牌不止一张卡片。任何帮助表示赞赏。

Shuffle.cpp

#include <iostream>
#include <vector>
#include <algorithm>
#include "stdio.h"
#include "stdlib.h"
#include "ctime"
#include "cstdlib"

using namespace std;

struct node
{
int number;
string suit;
struct node *info;
};

int main()
{
vector<node> MyHand(52);
vector<int> getNum;
vector<string> getSuit;

int choice;

MyHand.push_back(node());

MyHand[0].number = 2;
MyHand[0].suit = "S";
MyHand[1].number = 2;
MyHand[1].suit = "H";
MyHand[2].number = 2;
MyHand[2].suit = "D";
MyHand[3].number = 2;
MyHand[3].suit = "C";
//2
MyHand[4].number = 3;
MyHand[4].suit = "S";
MyHand[5].number = 3;
MyHand[5].suit = "H";
MyHand[6].number = 3;
MyHand[6].suit = "D";
MyHand[7].number = 3;
MyHand[7].suit = "C";
//3
MyHand[8].number = 4;
MyHand[8].suit = "S";
MyHand[9].number = 4;
MyHand[9].suit = "H";
MyHand[10].number = 4;
MyHand[10].suit = "D";
MyHand[11].number = 4;
MyHand[11].suit = "C";
//4
MyHand[12].number = 5;
MyHand[12].suit = "D";
MyHand[13].number = 5;
MyHand[13].suit = "C";
MyHand[14].number = 5;
MyHand[14].suit = "D";
MyHand[15].number = 5;
MyHand[15].suit = "C";
//5
MyHand[16].number = 6;
MyHand[16].suit = "D";
MyHand[17].number = 6;
MyHand[17].suit = "C";
MyHand[18].number = 6;
MyHand[18].suit = "D";
MyHand[19].number = 6;
MyHand[19].suit = "C";
//6
MyHand[20].number = 7;
MyHand[20].suit = "D";
MyHand[21].number = 7;
MyHand[21].suit = "C";
MyHand[22].number = 7;
MyHand[22].suit = "D";
MyHand[23].number = 7;
MyHand[23].suit = "C";
//7
MyHand[24].number = 8;
MyHand[24].suit = "D";
MyHand[25].number = 8;
MyHand[25].suit = "C";
MyHand[26].number = 8;
MyHand[26].suit = "D";
MyHand[27].number = 8;
MyHand[27].suit = "C";
//8
MyHand[28].number = 9;
MyHand[28].suit = "D";
MyHand[29].number = 9;
MyHand[29].suit = "C";
MyHand[30].number = 9;
MyHand[30].suit = "D";
MyHand[31].number = 9;
MyHand[31].suit = "C";
//9
MyHand[32].number = 10;
MyHand[32].suit = "D";
MyHand[33].number = 10;
MyHand[33].suit = "C";
MyHand[34].number = 10;
MyHand[34].suit = "D";
MyHand[35].number = 10;
MyHand[35].suit = "C";
//10
MyHand[36].number = 11; //need to convert to string "J"
MyHand[36].suit = "D";
MyHand[37].number = 11;
MyHand[37].suit = "C";
MyHand[38].number = 11;
MyHand[38].suit = "D";
MyHand[39].number = 11;
MyHand[39].suit = "C";
//11 (J)
MyHand[40].number = 12; //need to convert to string "Q"
MyHand[40].suit = "D";
MyHand[41].number = 12;
MyHand[41].suit = "C";
MyHand[42].number = 12;
MyHand[42].suit = "D";
MyHand[43].number = 12;
MyHand[43].suit = "C";
//12 (Q)
MyHand[44].number = 13; //need to convert to string "K"
MyHand[44].suit = "D";
MyHand[45].number = 13;
MyHand[45].suit = "C";
MyHand[46].number = 13;
MyHand[46].suit = "D";
MyHand[47].number = 13;
MyHand[47].suit = "C";
//13 (K)
MyHand[48].number = 14; //need to convert to string "A"
MyHand[48].suit = "D";
MyHand[49].number = 14;
MyHand[49].suit = "C";
MyHand[50].number = 14;
MyHand[50].suit = "D";
MyHand[51].number = 14;
MyHand[51].suit = "C";
//14 (A)

while (1)
{
    printf("1. Add a hand.\n");
    printf("2. Exit.");
    scanf("%d", choice);

    switch (choice)
    {
    case 1:
        printf("\nAdding a hand!\n");
        random_shuffle(MyHand.begin(), MyHand.end());

        break;
    case 2:
        exit(1);
    default:
        printf("\n Invalid Choice. \n");
        break;
    }
}

}

我试过的代码:

        switch (choice)
    {
    case 1:
        printf("\nAdding a hand!\n");
        random_shuffle(MyHand.begin(), MyHand.end(), MyHand);

        for (vector<node>::const_iterator i = MyHand.begin(); i != MyHand.end(); ++i)
        std::cout << *i << ' ';
        break;
    case 2:
        exit(1);
    default:
        printf("\n Invalid Choice. \n");
        break;
    }

1 个答案:

答案 0 :(得分:0)

您当前的for循环将无法编译,因为std::ofstream::operator<<没有带有const node对象的重载。通过添加您自己的一个来解决此问题,例如:

std::ostream& operator<<(std::ostream& o, const node& n)
{
    return o << n.number << " " << n.suit;
}