Ich muss wissen, was wäre der richtige Weg, um Maps mit 64-Bit-Schlüsseln zu implementieren. Es wird nicht so viele Elemente in ihnen geben, ich brauche nur verschiedene Bits des Schlüssels für verschiedene Dinge mit ausreichend großen Adressraum und ich brauche es sehr schnell, so String
Schlüssel wäre wahrscheinlich zu langsam. Bisher habe ich versucht:Haxe - Die richtige Methode zum Implementieren von Map mit Int64-Schlüsseln, die serialisiert werden können (natives Ziel)
import haxe.Int64;
import haxe.Unserializer;
import haxe.Serializer;
class Test {
static function main() {
var key:Int64 = 1 << 63 | 0x00000001;
var omap:Map<Int64, String> = new Map<Int64, String>();
omap.set(key, "test");
var smap:Map<Int64, String> = Unserializer.run(Serializer.run(omap));
var key2:Int64 = 1 << 63 | 0x00000001;
trace(key+" "+smap.get(key2));
}
}
die offensichtlich nicht funktioniert, weil haxe.Int64
eine Objektinstanz erstellt. Die Verwendung von cpp.Int64
funktioniert, weil es aus irgendeinem Grund in meinem cpp-Code auf 32-Bit-Ganzzahl zurückfällt und ich weiß nicht, was ich falsch mache. Wie kann ich es zwingen, 64 Bit zu "bleiben", oder sollte ich es anders machen?
Du hast gesagt, es wäre eine kleine Anzahl von Tasten, aber die lineare Suche für Ihren Anwendungsfall ok? Würde ein 'haxe.ds.BalancedTree' oder eine benutzerdefinierte Karte (die eine geringe Wahrscheinlichkeit hat, die lineare Suche durchzuführen) nicht besser funktionieren? –
@jonasmalacofilho Es würde wahrscheinlich, danke für den Vorschlag. – wildfireheart