In erster Linie, ziehen Sie die Saite und verwenden Sie 2 Ints, die Sie jetzt möglicherweise getan haben. Kudos, um herauszufinden, dass ein Baum der beste Weg ist, eine spärliche Matrix zu implementieren. Normalerweise scheint es ein Magnet für schlechte Implementierungen zu sein.
FYI, ein Dreifach-Verbundschlüssel funktioniert auch, und ich nehme auch ein Paar Paare an.
Es macht für einige hässliche Sub-Scripting obwohl, so ein wenig Makro Magie wird Ihr Leben leichter machen. Ich habe diesen allgemeinen Zweck verlassen, aber die Argumente im Makro zu schreiben ist eine gute Idee, wenn Sie Makros für bestimmte Karten erstellen. Die TresKey12
ist getestet und läuft gut. QuadKeys
sollte auch funktionieren.
HINWEIS: Solange Ihre Schlüsselteile grundlegende Datentypen sind, brauchen Sie NICHT mehr zu schreiben. AKA, keine Notwendigkeit, sich über Vergleichsfunktionen zu ärgern. Die STL hat dich abgedeckt. Codiere es einfach und lass es krachen.
using namespace std; // save some typing
#define DosKeys(x,y) std::make_pair(std::make_pair(x,y))
#define TresKeys12(x,y,z) std::make_pair(x,std::make_pair(y,z))
#define TresKeys21(x,y,z) std::make_pair(std::make_pair(x,y),z))
#define QuadKeys(w,x,y,z) std::make_pair(std::make_pair(w,x),std::make_pair(y,z))
map<pair<INT, pair<ULLNG, ULLNG>>, pIC_MESSAGE> MapMe;
MapMe[TresKey12(Part1, Part2, Part3)] = new fooObject;
Wenn jemand will, um mich beeindrucken, zeigt mir, wie einen Operator vergleichen zu machen für TresKeys
, die nicht auf Brutpaare angewiesen ist, damit ich ein einziger struct
mit 3 Mitgliedern nutzen kann und eine Vergleichsfunktion verwenden.
PS: TresKey12 gab mir Probleme mit einer Karte als Paar deklariert, z wie es x macht, paar, und diese beiden nicht schön spielen. Kein Problem für DosKeys oder QuadKeys. Wenn es aber ein heißer Sommer Freitag ist, können Sie eine unerwartete Nebenwirkung der Eingabe in DosEquis finden ... ähm .. DosKeys ein paar Mal, ist ein Durst nach mexikanischen Bier. Vorbehalt Emptor. Wie Sheldon Cooper sagt: "Was ist das Leben ohne Laune?".
Sie könnte leicht und berechtigterweise zwei Long-Positionen in eine _int64 stopfen, oder wie in meiner Antwort unten, eine Seriennummer, PID, und NodeId. Da MAX_PID (1 << 22) unter Linux ist, hinterlässt dies tatsächlich 64 - (32 + 22) für die NodeId, die 10 Bits ist und einen beliebigen Wert bis (1 << 10) IE enthält: 1024 – RocketRoy
Angenommen, Sie tun Wenn Sie die Map nicht in einer bestimmten Reihenfolge durchlaufen möchten, verwenden Sie eine Hash-Map wie std :: unordered_map. Viel effizienter, besonders wenn Sie so viele Werte haben. – hyde