2016-04-07 20 views
1

ich eine Struktur haben ...C++: Erstellen einer zweidimensionalen Anordnung eines Struct

struct playerProbs { 
int probPlayer1; 
int probPlayer2; 
}; 

und eine 2-D-Array playerProbs killChart[11][11]=

ich versucht bin Werte in die probPlayer1 hinzuzufügen und probPlayer2 in jeder Struktur in jeder Position des Arrays. Alle Werte sind unterschiedlich. Ich habe mich gefragt, wie das am schnellsten und effizientesten funktioniert?

Ich habe mir einige Beispiele angeschaut, aber alle scheinen sehr, sehr zeitaufwendig. Danke für Ihre Zeit!

EDIT: aktuelle Code,

struct playerProbs { 
    int probPlayer1; 
    int probPlayer2; 
}; 

playerProbs killChart[11][11]; 

killChart[0][0].probPlayer1 = 30; //getting an error saying size of array 
killChart[0][0].probPlayer2 = 30; //must be bigger than 0 
+2

Sie möchten also diese 2d-Array auffüllen? Da Sie nur 121 Elemente haben (praktisch nichts), verwenden Sie einfach eine doppelt verschachtelte for-Schleife. Das wäre mit Abstand am einfachsten zu programmieren und die Effizienz bei einem so kleinen n ist irrelevant. (Sie würden bereits eine O (n) Effizienz haben). –

+1

Womit kompilieren Sie das? Ich habe gerade den von Ihnen geposteten "Current Code" ausgeführt und es hat perfekt funktioniert. –

+0

Ich benutze Visual Studios 2010 –

Antwort

0

Sie bevölkern nur eine sehr kleine Datenmenge, die als solche nur eine for-Schleife verschachtelten nutzen.

for(int i(0); i < 11; ++i) 
    for(int j(0) j < 11; ++j) 
     killChart[i][j].probPlayer1 = x; 
     killChart[i][j].probPlayer2 = y; 
    } 
} 

Bearbeitet per Anfrage in Kommentaren ist dies, wie Sie diese in Longhand eingeben würden. Um einen gegebenen Wert zuweisen, lassen Sie uns verwenden:

killChart[0][0].probPlayer1 = 30; 
killChart[0][0].probPlayer2 = 30; 

killChart[0][1].probPlayer1 = 30; 
killChart[0][1].probPlayer2 = 30; 

/// ........ 
killChart[10][10].probPlayer1 = 30; 
killChart[10][10].probPlayer2 = 30; 

// And so on and so forth for all values 

Einen vollständigen Code, der (mit einer viel kleineren Stichprobengröße, nur eine 2x2-Array) ausgeführt werden kann, ist unten dargestellt: (Ich will nicht geben aus allen 121 Werte, und dies zeigt, beide Methoden zu verwenden es.)

struct playerProbs { 
    int probPlayer1; 
    int probPlayer2; 
    playerProbs(int _v1, int _v2) : probPlayer1(_v1), probPlayer2(_v2){} 
}; 

int main() 
{ 


playerProbs killChart[2][2] = 
       { // Assign via bracket initialization 
        { playerProbs(30,30), playerProbs(30,30) }, 
        { playerProbs(30,30), playerProbs(30,30) }, 
       }; 

// Assign via individual initialization. 
killChart[0][0].probPlayer1 = 30; 
killChart[0][0].probPlayer2 = 30; 
killChart[0][1].probPlayer1 = 30; 
killChart[0][1].probPlayer2 = 30; 
killChart[1][0].probPlayer1 = 30; 
killChart[1][0].probPlayer2 = 30; 
killChart[1][1].probPlayer1 = 30; 
killChart[1][1].probPlayer2 = 30; 
return 0; 
} 
+0

Ich glaube, ich habe meine Frage falsch geschrieben. Zum Beispiel 'killChart [0] [0] = probPlayer1.x = .3 probPlayer1.y = .3' während' killChart [0] [1] = probPlayer1.x = .1 probPlayer1.y = .15' Alle Felder in das Array ist unterschiedlich –

+0

@BeccaBohem Wie entscheiden Sie sich für diese Werte? Wenn Sie zur Kompilierungszeit statische Werte zugewiesen haben möchten, müssen Sie diese wahrscheinlich lange auskodieren. Andernfalls, wenn Sie einen Algorithmus verwenden, um diese Werte zu entscheiden, dann können Sie wahrscheinlich eine Möglichkeit finden, diese als Funktion von i & j zu haben, und die for-Schleifen müssen Ihnen die Zahlen zuweisen. Gibt es sonst irgendwelche Informationen darüber, wie sie verwendet werden, die für andere Möglichkeiten relevant sind, ihre Werte zu erfüllen? –

+0

Ich glaube, ich muss es einfach aus der Hand halten, da es keinen Sinn oder Grund hinter den Werten gibt. Kannst du mir ein Beispiel geben, wie ich die Werte für 'killChart [0] [0] eingegeben habe? 'mit den Werten' probPlayer1 = 30, probPlayer2 = 30'? Ich habe seit langer Zeit nicht mehr in C++ codiert und habe Schwierigkeiten, es herauszufinden –

0

Eine weitere Alternative ist Klammer-Initialisierung

struct playerProbs { 
    int probPlayer1; 
    int probPlayer2; 
}; 

playerProbs killChart[11][11] = { 
    { {1, 2}, {3, 4}, {5, 6}, {7, 8}, ... }, // 11 { , }s 
    { {4, 7}, {3, 5}, {0, 4}, {1, 6}, ... }, 
    ...          // x11 
} 

Obwohl zu verwenden, wie sagt Chris bei 11x11 ziemlich unleserlich sein el Elemente.

+0

Sie müssen auch probPlayer1 Mitglied und probPlayer2 Mitglied Werte zuweisen. (killChart ist ein Array von Strukturen, nicht von Ints) Sie müssen einen Konstruktor für playerProbs deklarieren, um die Werte zuzuweisen. –

+0

Wenn Visual Studio 2010 ordnungsgemäße C++ 11 Aggregat-Initialisierung hat, dann brauchen Sie den Konstruktor nicht, aber ich glaube nicht an VS2010 für C++ 11 – vu1p3n0x

Verwandte Themen