Teile - Gruppen Verwaltung

paddy3k

Mitglied
Hiho,

ich stehe vor folgendem Problem. Bin gerade dabei ein Puzzle zu programmieren, ist auch nahezu fertig. Teile die man bisher zusammengesetzt hat sollen zu einer Gruppe gehören.

Meine Frage ist jetzt, wie verwalte ich das am besten ?! Bisher habe ich folgenden Ansatz :

Es gibt ein Array Gruppe[Teil] ... z.B. Gruppe[3] = 4 --> würde bedeuten Puzzleteil 3 gehört zur Gruppe 4.

Jetzt habe ich ein zweites 2 dimensionales Array :

InGruppe[Gruppe][... Teile ...] ...

über Gruppe[4] könnte ich jetzt auf die Teile Nummern zugreifen die in dieser Gruppe 4 sind.

Allerdings ist das ganze ziemlich kompliziert finde ich aber ich komme einfach auf keine einfachere Lösung für die Gruppen Verwaltung.

Sagen wir mal der Benutzer verschiebt gerade eine Gruppe mit 3 Teilen und setzt diese
an eine andere Gruppe die schon aus 4 Teilen besteht. Jetzt muss man ja diese beiden
Gruppen zusammenführen. Ich hoffe ich habe das Problem einigermaßen verständlich beschrieben :-/

Weiß jemand wie das einfacher geht ?! Ich muss ja nur wissen zu welcher Gruppe welches Teil gehört und welche Gruppe welche Teile beinhaltet. Hmm ich steh aufm Schlauch.
 
Also dafür läßt sich eigentlich hervorragend eine Multimap verwenden.
Eine Mulitmap ist ein Paar besetehend aus Schlüssel und Wert, bei der man mehrere Werte
auf einen Schlüssel abspeichern kann.
Die Schlüssel der Map werden dann anhand eines Sortierkriteriums sortiert.
Vorraussetzung ist nat. das du ein weng mit der stl und dem Umgang mit Iteratoren vertraut bist
Ungefähr so:


Code:
#include <iostream>
#include <map>
#include <utility>
#include <iterator>

using namespace std;

int main(){

        //1. Template Para.: key (Gruppe da eindeutig); 2. Template Para.: value(Puzzleteil da mehrdeutig)
        //3. Template Para.: Sortierkriterium (optional default klein->groß)
        multimap<int, int> groups; 

        //Aufbauen der map
        groups.insert(pair<int, int>(1, 1));
        groups.insert(pair<int, int>(1, 2));
        groups.insert(pair<int, int>(2, 4));
        groups.insert(pair<int, int>(2, 6));
        groups.insert(pair<int, int>(3, 10));

        //sich ein paar von itertoren holen wobei der erste auf den Anfang der gesuchten Range zeigt
        //und der zweite auf das Ende 
        // Die Range wird hier anhand des keys(der Gruppe) ausgewählt
        for(pair<multimap<int, int>::iterator, multimap<int, int>::iterator> p = groups.equal_range(1); p.first != p.second; ++p.first)
                cout << "To group '1' belongs puzzle part: '" << (*p.first).second  << "'" << endl;
}

Dazu siehe auch STL:
http://www.sgi.com/tech/stl/Multimap.html

Gruß

RedWing
 
Zuletzt bearbeitet:
Zurück