🫘
Zig HashMap: カスタムハッシュ関数の利用
ziv version: 0.12.0-dev.1773+8a8fd47d2
Context
型を渡す必要があり、hash
および eql
という2つの関数を提供する必要があります。
以下は例です。
const std = @import("std");
pub fn FnvContext(comptime K: type) type {
return struct {
pub fn hash(ctx: @This(), key: K) u64 {
_ = ctx;
return std.hash.Fnv1a_64.hash(key);
}
pub fn eql(ctx: @This(), a: K, b: K) bool {
_ = ctx;
return std.meta.eql(a, b);
}
};
}
pub fn FastHashMap(comptime K: type, comptime V: type) type {
return std.HashMap(K, V, FnvContext(K), std.hash_map.default_max_load_percentage);
}
pub fn main() !void {
var map = FastHashMap([]const u8, []const u8).init(std.heap.page_allocator);
defer map.deinit();
map.put("foo", "bar") catch unreachable;
std.log.info("{s}", .{map.get("foo").?});
}
Discussion