Wie boole ich eine 3D-Punktstruktur mit std :: map?

8

Wie verwende ich die folgende Struktur:

%Vor%

als Schlüssel für std::map<point, bool> ? Wie definiere ich operator< für zwei Punkte?

    
szx 24.05.2011, 11:05
quelle

6 Antworten

17

Standard-Bibliothekscontainer wie std::map erfordern, dass Ihre Bestellung eine "strenge schwache Bestellung" ist, daher müssen Sie beim Entwerfen sehr vorsichtig sein.

Der typische Ansatz für ein 3-er Tupel sieht folgendermaßen aus:

%Vor%

Es ist wie ein Komparator für nur x , aber mit dem Unterschied, dass, wenn die beiden x s gleich sind, Sie durchkommen, um y s zu vergleichen. Wenn sie gleich sind, fallen Sie ähnlich in den z Vergleich.

    
Lightness Races in Orbit 24.05.2011, 11:12
quelle
6

Natürlich würde boost::tuple<int,int,int> dies völlig unnötig machen.

Aktualisieren Fügen Sie hier die all-inclusive have-your-cake-und-essen-es-zu-kein-Nachteil-Lösung hinzu. IMHO rockt es!

%Vor%

Hier ist der Kicker: Alles optimiert sich weg. Kompilieren:

%Vor%

Mit g ++ -O2 ergibt sich folgendes in der Baugruppe.

%Vor%

Der Compiler konnte das gesamte Programm auf ... return 0 effektiv optimieren. Das ist ziemlich ordentlich.

Hier geht die einfache Antwort:

%Vor%

Außerdem würde ich nach einer Neudefinition meiner Struktur suchen, die es erlaubt, std :: lexicographical_compare

zu verwenden %Vor%     
sehe 24.05.2011 11:20
quelle
1

Ein fauler Weg, es zu tun:

%Vor%     
finnw 24.05.2011 11:20
quelle
0

Der einfachste Weg dies zu schreiben ist wie folgt:

%Vor%     
Asha 24.05.2011 11:09
quelle
0

Wenn sie auf eine bestimmte Weise geordnet werden sollen, sollten Sie genau diesen Weg angeben (zum Beispiel durch euklidische Entfernung von 0/0/0). Wenn Sie nur verschiedene Punkte unterscheiden möchten, können Sie etwas wie

tun %Vor%     
b.buchhold 24.05.2011 11:11
quelle
-1

Nur raten Jungs,

%Vor%

Natürlich ist die Reihenfolge irgendwie komisch, da x, y und z vorzeichenbehaftete Werte sind, aber das sollte geeignet sein, in eine std :: map zu ordnen, oder?

    
vrince 24.05.2011 18:31
quelle

Tags und Links