Мне нужно знать, что было бы правильным способом реализовать Карты с 64-битными ключами. В них будет не так много элементов, мне просто нужно использовать различные биты ключа для разных вещей с достаточно большим адресным пространством, и мне нужно, чтобы это было очень быстро, поэтому клавиши String
, вероятно, были бы слишком медленными. До сих пор я пытался:Haxe - Правильный способ реализации карты с ключами Int64, которые могут быть сериализованы (основная цель)
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));
}
}
, который, очевидно, не работает, потому что haxe.Int64
создает экземпляр объекта. Использование cpp.Int64
работает, потому что по какой-то причине возвращается к 32-битовому целому в моем коде cpp, и я не знаю, что я делаю неправильно. Как я могу заставить его «остановиться» 64 бит, или я должен сделать это по-другому?
Вы сказали, что будет небольшое количество ключей, но линейный поиск хорошо для вашего случая использования? Разве не улучшилось бы «haxe.ds.BalancedTree» или пользовательская карта (которая с низкой вероятностью выполняет линейный поиск)? –
@jonasmalacofilho Это, вероятно, было бы, спасибо за предложение. – wildfireheart