2016-07-10 21 views
-1

Well Hallo JungsZu viele Elemente des Vektors. Kombinationen Programm

Ich bin ein Projekt für Lotto-Statistiken zu machen und im Grunde hat es Klasse „kombinacije4“, die Attribute als erstes num zweiten num dritter num vierte num und Datum und Zeit hat, wenn es zuletzt erschien und wie viel Mal ist die Kombination aufgetaucht.

class kombinacije4 { 
public: 
    Date date; 
    Time time; 
    int first; 
    int second; 
    int third; 
    int fourth; 

    int howMuchRoundsDidntShowedUp; 
    int howMuchTimesAppeared; 
    void GetCombination(int, int, int, int); 
    void GetCombinationsAfterRound(int); 
}; 

Dann habe ich Vektor dieser Elemente

std::vector<kombinacije4> fourties; 

ich initialisieren dieses Vektor ziemlich schnell und gut, aber ich habe ein Problem, wenn ich wie diese Attribute ändern will, wenn es zeigte zuletzt das Datum und die Uhrzeit oder wie viel es aufgetaucht ist, denn es gibt 80 Nummern und in einer Runde zeichnen sie 20 Zahlen. Aus diesen 20 Zahlen muss ich Kombinationen von 4 machen und sie in fourties finden und ihre Attribute ändern. Seit 700 mal. Weil es 700 Runden gibt. Hat jemand eine Idee wie ich direkt auf deren Werte zugreifen kann. Vielleicht std::find kann etwas tun? Offensichtlich habe ich ein Zeitlimitproblem.

Irgendeine Idee, dieses Programm auf die andere Weise zu tun?

for(auto i=round.begin();i!=round.end();i++){ 
     for(auto j=i+1;j!=round.end();j++){ 
      for(auto k=j+1;k!=round.end();k++){ 
       for(auto l=k+1;l!=round.end();l++){ 
        for(auto p=fourties.begin();p!=fourties.end();p++){ 
         -if-statement 
        } 
       } 
      } 
     } 
    } 
    Obviously this block is going to pass 3 million times through the vector of million and half elements 

DANKE!

+0

einige Anmerkungen: 1) Was bedeutet 'if-statement' tun? Wenn die Größe von round nicht geändert wird, können Sie anstatt 4 verschachtelte Schleifen "i, j, k, l" vorberechnen, wie oft "if-statement" ausgeführt wird (abhängig von round.size)()) und haben nur eine Schleife. 2) Vrijeme ist kein englisches Wort. Mischen Sie keine zwei Sprachen, wenn Sie Fragen zum Stapelüberlauf stellen. – mercury0114

+0

if-Anweisung bedeutet, wenn in der Runde eine Kombination gezeichnet wird, sucht sie nach dieser Kombination durch den ganzen Vektor von 1 580 512 Kombinationen und WENN ES GEFUNDEN ist (if-Anweisung) ändere 'howMuchRoundsDidntShoverwedUp' und' howMuchTimesAppeared' Zeit. Ich habe nur vergessen, dieses Wort zu ändern, aber es ist nur ein Wort. Mit freundlichen Grüßen –

+0

Ich weiß es nicht sicher, aber ich vermute, dass 'for_each_combination' aus dieser Bibliothek hilfreich wäre: https://github.com/HowardHinnant/combinations –

Antwort

0

Um auf die Mitglieder eines Objekts innerhalb eines Vektors zuzugreifen, verwenden Sie einfach myobject[iterator].membername.

Zum Beispiel:

for (auto p = fourties.begin(); p!= fourties.end(); p++) 
{ 
    if (fourties.at[p].first == "your data" && 
     fourties.at[p].second == "your data" && 
     fourties.at[p].third == "your data" && 
     fourties.at[p].fourth == "your data") 
    { 
     fourties.at[p].date = 'your data'; 
     fourties.at[p].time = 'your data'; 
    } 
} 
+0

Sie haben nicht verstanden. Ich brauche etwas schneller, um den Vektor zu durchlaufen. Vielleicht ein anderer Containertyp von Daten oder etwas anderes? –

+0

Sie könnten eine if-Anweisung in jede der runden for-Schleifen in Ihrem Programm einfügen, nach dem Vorhandensein dieser Zahl in den 40er Jahren suchen und nur fortfahren, wenn die Prüfung positiv ist. Sie würden vier Überprüfungen für mehrere Schleifen in der inneren Struktur in etwa 80% der Fälle handeln – maja