2017-11-16 1 views
0

Ich mache ein Blackjack-Spiel und habe ein Array erstellt, das als Hand fungiert, mit der der Benutzer behandelt wird. Ich möchte es so sortieren können, dass die Hand in numerischer Reihenfolge sortiert ist, so dass es einfacher ist zu bestimmen, welche Art von Hand der Benutzer hat. Hier ist meine sturct für die Karten:Sortierung eines Arrays von Strukturen (Karten)

struct ACard{ 
    int num; 
    const char *pic; 
}; 

ich das Array von int num sortieren möchten. Ich habe versucht, einfach eine einfache Einfügesortierung zu verwenden, um die Sortierung zu vervollständigen, aber ich glaube, dass ich den Operator überladen muss, um dies zu tun, aber ich habe Probleme, da ich eine Struktur wie diese noch nie überladen habe. Hier ist, was ich für die Art haben bisher:

 int i,j; 
     ACard key; 
     for(int i = 1; i < 5; i++){ 
      key = userHand[i].num; 
      j = i - 1; 

      while(j >= 0 && userHand[j].num > key){ 
       userHand[j + 1] = userHand[j]; 
       j = j - 1; 
      } 
      userHand[j + 1] = key; 
     } 

* Anmerkung userHand ist die Anordnung von ACard's, die ich sortieren möchten.

+2

Gibt es einen Grund, warum Sie 'std :: array' oder' std :: vector' nicht verwenden, um die ACards zu speichern und 'std :: sort()' mit einem benutzerdefinierten Vergleicher zu verwenden? –

+1

Warum verwenden Sie nicht 'std :: sort' mit einem Vergleich Lambda? – Quentin

+0

Ich bin nicht vertraut mit der std :: sort(), könnten Sie das erklären? – zsloan112

Antwort

2

Mit STL-Containern können Sie std::sort Funktion verwenden. Die ersten zwei Argumente definieren den Bereich der zu sortierenden Elemente. Das dritte Argument definiert eine LessThan-Funktion, die für den Vergleich benutzerdefinierter Elemente verwendet wird (Sie können dafür einen Lambda-Ausdruck verwenden).

std::vector<ACard> userHand; // or another stl container 

// initialize userHand somehow 

std::sort(userHand.begin(), userHand.end(), 
    [](const ACard& left, const ACard& right) 
    { 
     return left.num < right.num; 
    }); 
+1

Richtiger Gedanke. Sieht nach dem richtigen Code aus. Aber es fehlt dir an Erklärungen dafür, was du getan hast. Sie werden nicht viel brauchen, da dieser Code verdammt nahe ist, selbst zu dokumentieren. – user4581301

Verwandte Themen