Ich entschied mich schließlich, std.RedBlackTree
anstelle der integrierten assoziativen Arrays (oder Hash) zu verwenden, weil ich ein sortiertes assoziatives Array benötigt. Das gewünschte Verhalten ähnelt sehr ähnlich std::map
in C++/STL.Warum std.RedBlackTree als Karte bricht?
void main() {
alias Tuple!(float, float) Pair;
alias RedBlackTree!Pair Map;
Map m1;
m1.insert(Pair(1.1, 2.2));
}
Der obige Code, je nachdem wie man es kompilieren (mit oder ohne -release), werden Segmentierungsfehler verursachen oder Behauptung werfen.
Die gleiche Sache mit diesem:
void main() {
struct Pair { float first, second; }
alias RedBlackTree!(Pair, "a.first < b.first") Map;
Map m1;
m1.insert(Pair(1.1, 2.2));
}
Riecht wie ein Bug, aber gibt es eine Abhilfe?
Ich hatte den Eindruck, dass 'RedBlackTree' eine Struktur war, weil' Array' eine Struktur ist, lol. Auch "a.first
Arlen
Als Randnotiz sollte DMD so etwas wie einen Fehler kennzeichnen. Ich meine, es gibt keine Möglichkeit zu sagen, ob ein Typ eine Klasse ist oder nicht, ohne den Quellcode oder die Dokumente, oder? – Arlen
Nicht, dass ich davon weiß. Im Allgemeinen benutze ich die Dokumente, während ich code, wenn ich nicht vertraut bin mit dem, was ich arbeite ... aber die "AssertError ... null this" (wenn ich nicht kompilieren mit dem Release-Flag) ist normalerweise die Art, wie ich herausfand, dass ich eine Klasse für eine Struktur verwechselte. –